python3使用scrapy生成csv文件代碼示例
去騰訊招聘網(wǎng)的信息,這個小項目有人做過,本著一個新手學習的目的,所以自己也來做著玩玩,大家可以參考一下。
這里使用的是調(diào)用cmdline命令來生成csv文件,而不是importcsv模塊。
from scrapy import cmdline
cmdline.execute("scrapy crawl field -o info.csv -t csv".split())
這段代碼我保存在一個自建的.py文件中,然后在主文件中調(diào)用這個模塊,這樣就不用每次在cmd中敲命令了,大家可以使用這種方法我覺得很方便的。
進入正題(獲取騰訊招聘網(wǎng)的信息http://hr.tencent.com/position.php):

保存的csv文件內(nèi)容:

我們需要獲取的數(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") #我使用這種路徑添加的方式來調(diào)用GetItem函數(shù)和main函數(shù)
from get_Field.items import GetItem
import main #main函數(shù)開頭就說了兩行調(diào)用程序的代碼,你也可以在cmd中使用scrapy crawl field -o info.csv -t csv來調(diào)用。主要是方便
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方法獲取我們需要的內(nèi)容,再使用extract()抽取器獲取到
for i in name: #利用循環(huán)將每一次的內(nèi)容存入我們上面設置的列表中去,方便后面存入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頁以內(nèi),我們callback返回下一頁的鏈接繼續(xù)到parse這個默認函數(shù),
以上是spider中的代碼。
其實實現(xiàn)這個代碼不難,唯一有一點小疑惑的地方可能就是第一個yield的使用,一開始我是使用調(diào)用一個新的函數(shù),然后在里面實現(xiàn)值的返回,但是麻煩還有一點小問題,所以這里我們就是用這種簡單的方式就行了,yield將每次循環(huán)的數(shù)據(jù)返回,返回后再繼續(xù)執(zhí)行循環(huán)。
總結
以上就是本文關于python3使用scrapy生成csv文件代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
Python實現(xiàn)一個Git日志統(tǒng)計分析的小工具
這篇文章主要給大家介紹了關于利用Python如何實現(xiàn)一個Git日志統(tǒng)計分析小工具的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-12-12
python實現(xiàn)替換word中的關鍵文字(使用通配符)
今天小編就為大家分享一篇python實現(xiàn)替換word中的關鍵文字(使用通配符),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python批量插入數(shù)據(jù)到mysql的3種方法
這篇文章主要給大家介紹了關于python批量插入數(shù)據(jù)到mysql的3種方法,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)庫的需求,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-10-10
Python實現(xiàn)的微信公眾號群發(fā)圖片與文本消息功能實例詳解
這篇文章主要介紹了Python實現(xiàn)的微信公眾號群發(fā)圖片與文本消息功能,結合實例形式詳細分析了Python調(diào)用微信接口實現(xiàn)微信公眾號群發(fā)圖片與文本消息的具體操作步驟與相關注意事項,需要的朋友可以參考下2017-06-06
python實現(xiàn)rar解壓和壓縮的方法(附源碼)
數(shù)據(jù)量現(xiàn)在越來越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關于python實現(xiàn)rar解壓和壓縮的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-10-10
Python cookbook(數(shù)據(jù)結構與算法)在字典中將鍵映射到多個值上的方法
這篇文章主要介紹了Python在字典中將鍵映射到多個值上的方法,涉及Python針對字典的相關映射與初始化相關操作技巧,需要的朋友可以參考下2018-02-02

