python3使用scrapy生成csv文件代碼示例
去騰訊招聘網(wǎng)的信息,這個小項目有人做過,本著一個新手學習的目的,所以自己也來做著玩玩,大家可以參考一下。
這里使用的是調用cmdline命令來生成csv文件,而不是importcsv模塊。
from scrapy import cmdline cmdline.execute("scrapy crawl field -o info.csv -t csv".split())
這段代碼我保存在一個自建的.py文件中,然后在主文件中調用這個模塊,這樣就不用每次在cmd中敲命令了,大家可以使用這種方法我覺得很方便的。
進入正題(獲取騰訊招聘網(wǎng)的信息http://hr.tencent.com/position.php):
保存的csv文件內容:
我們需要獲取的數(shù)據(jù)首先應該使用scrapy的items容器記錄下來:
import scrapy class GetItem(scrapy.Item): name = scrapy.Field() #招聘單位 genre = scrapy.Field() #招聘類型 number = scrapy.Field() #招聘人數(shù) place = scrapy.Field() #招聘地點 time = scrapy.Field() #招聘時間
以上為我們等一下需要獲取的信息
然后我們新建spider文件來編寫爬去網(wǎng)站的代碼:
# _*_ coding:utf-8 _*_ import scrapy from scrapy.http import Request from time import sleep import os import sys sys.path.append("D:\PYscrapy\get_Field") #我使用這種路徑添加的方式來調用GetItem函數(shù)和main函數(shù) from get_Field.items import GetItem import main #main函數(shù)開頭就說了兩行調用程序的代碼,你也可以在cmd中使用scrapy crawl field -o info.csv -t csv來調用。主要是方便 class Tencentzhaopin(scrapy.Spider): name = "field" #這個程序要執(zhí)行的唯一標識名 可以自己設置 start_urls = ["http://hr.tencent.com/position.php?&start=0#a"] #首頁網(wǎng)址 url = "http://hr.tencent.com/" #由于有翻頁操作所以我們設置翻頁前綴,等一下獲取后綴 count = 0 names = [] #這五個列表記錄我們獲取的信息 genres = [] numbers = [] places = [] times = [] filename = "data.txt" #保存的文件名 if os.path.exists(filename) == True: #判斷這個文件是否已經(jīng)存在文件夾中,有就移除掉。 os.remove(filename) def parse(self,response): self.count += 1 #設置我們需要爬去多少頁,不設置的話會有幾百頁需要爬取 name = response.xpath('//table//td[@class="l square"]//a//text()').extract() #通過xpath方法獲取我們需要的內容,再使用extract()抽取器獲取到 for i in name: #利用循環(huán)將每一次的內容存入我們上面設置的列表中去,方便后面存入csv文件(下面4個類似) self.names.append(i) genre = response.xpath('//table//tr[not(@class="h")]//td[2][not(@align="center")]//text()').extract() for i in genre: self.genres.append(i) number = response.xpath('//table//tr[not(@class="h")]//td[3][not(@align="center")]//text()').extract() for i in number: self.numbers.append(i) place = response.xpath('//table//tr[not(@class="h")]//td[4][not(@align="center")]//text()').extract() for i in place: self.places.append(i) time = response.xpath('//table//tr[not(@class="h")]//td[5][not(@align="center")]//text()').extract() for i in time: self.times.append(i) new_url = response.xpath('//*[@id="next"]//@href').extract() #前面我們說過需要翻頁操作,所以這里是獲取到翻頁的后綴 new_url = self.url+new_url[0] #再與前綴結合,獲取到一個完整的下一頁鏈接 sleep(0.5) #我們設置一個翻頁的時間,太快了不好。。。。(我是這樣想的) #下面就是信息存入items容器 for i in range(len(self.genres)): #for循環(huán)列表的長度,獲取到所有信息 info = GetItem() #實例一個類info用來保存數(shù)據(jù) info["name"] = self.names[i] #將每一個屬性列表中的每一個數(shù)據(jù)保存依次保存到info中去 info["genre"] = self.genres[i] info["number"] = self.numbers[i] info["place"] = self.places[i] info["time"] = self.times[i] yield info #這個yield注意了,嗯,這就很舒服了 #我們將每一次保存的數(shù)據(jù)返回,但是返回了我們還需要程序繼續(xù)執(zhí)行,所以使用yield函數(shù)返回后繼續(xù)執(zhí)行 if self.count<=20: yield Request(url=new_url,callback=self.parse) #如果滿足20頁以內,我們callback返回下一頁的鏈接繼續(xù)到parse這個默認函數(shù),
以上是spider中的代碼。
其實實現(xiàn)這個代碼不難,唯一有一點小疑惑的地方可能就是第一個yield的使用,一開始我是使用調用一個新的函數(shù),然后在里面實現(xiàn)值的返回,但是麻煩還有一點小問題,所以這里我們就是用這種簡單的方式就行了,yield將每次循環(huán)的數(shù)據(jù)返回,返回后再繼續(xù)執(zhí)行循環(huán)。
總結
以上就是本文關于python3使用scrapy生成csv文件代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
查找適用于matplotlib的中文字體名稱與實際文件名對應關系的方法
這篇文章主要介紹了查找適用于matplotlib的中文字體名稱與實際文件名對應關系的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01Python實現(xiàn)提取給定網(wǎng)頁內的所有鏈接
這篇文章主要和大家分享一個實用的Python腳本,可以實現(xiàn)從給定的網(wǎng)頁中檢索所有鏈接,并將其保存為txt文件,需要的小伙伴可以收藏一下2023-05-05python+pytest接口自動化之session會話保持的實現(xiàn)
在接口測試的過程中,經(jīng)常會遇到有些接口需要在登錄的狀態(tài)下才能請求,本文主要介紹了python+pytest接口自動化之session會話保持的實現(xiàn),感興趣的可以了解一下2022-06-06