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

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

我們需要獲取的數(shù)據(jù)首先應(yīng)該使用scrapy的items容器記錄下來:
import scrapy class GetItem(scrapy.Item): name = scrapy.Field() #招聘單位 genre = scrapy.Field() #招聘類型 number = scrapy.Field() #招聘人數(shù) place = scrapy.Field() #招聘地點(diǎn) time = scrapy.Field() #招聘時(shí)間
以上為我們等一下需要獲取的信息
然后我們新建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" #這個(gè)程序要執(zhí)行的唯一標(biāo)識(shí)名 可以自己設(shè)置
start_urls = ["http://hr.tencent.com/position.php?&start=0#a"] #首頁(yè)網(wǎng)址
url = "http://hr.tencent.com/" #由于有翻頁(yè)操作所以我們?cè)O(shè)置翻頁(yè)前綴,等一下獲取后綴
count = 0
names = [] #這五個(gè)列表記錄我們獲取的信息
genres = []
numbers = []
places = []
times = []
filename = "data.txt" #保存的文件名
if os.path.exists(filename) == True: #判斷這個(gè)文件是否已經(jīng)存在文件夾中,有就移除掉。
os.remove(filename)
def parse(self,response):
self.count += 1 #設(shè)置我們需要爬去多少頁(yè),不設(shè)置的話會(huì)有幾百頁(yè)需要爬取
name = response.xpath('//table//td[@class="l square"]//a//text()').extract()
#通過xpath方法獲取我們需要的內(nèi)容,再使用extract()抽取器獲取到
for i in name: #利用循環(huán)將每一次的內(nèi)容存入我們上面設(shè)置的列表中去,方便后面存入csv文件(下面4個(gè)類似)
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()
#前面我們說過需要翻頁(yè)操作,所以這里是獲取到翻頁(yè)的后綴
new_url = self.url+new_url[0] #再與前綴結(jié)合,獲取到一個(gè)完整的下一頁(yè)鏈接
sleep(0.5) #我們?cè)O(shè)置一個(gè)翻頁(yè)的時(shí)間,太快了不好。。。。(我是這樣想的)
#下面就是信息存入items容器
for i in range(len(self.genres)): #for循環(huán)列表的長(zhǎng)度,獲取到所有信息
info = GetItem() #實(shí)例一個(gè)類info用來保存數(shù)據(jù)
info["name"] = self.names[i] #將每一個(gè)屬性列表中的每一個(gè)數(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 #這個(gè)yield注意了,嗯,這就很舒服了
#我們將每一次保存的數(shù)據(jù)返回,但是返回了我們還需要程序繼續(xù)執(zhí)行,所以使用yield函數(shù)返回后繼續(xù)執(zhí)行
if self.count<=20:
yield Request(url=new_url,callback=self.parse)
#如果滿足20頁(yè)以內(nèi),我們callback返回下一頁(yè)的鏈接繼續(xù)到parse這個(gè)默認(rèn)函數(shù),
以上是spider中的代碼。
其實(shí)實(shí)現(xiàn)這個(gè)代碼不難,唯一有一點(diǎn)小疑惑的地方可能就是第一個(gè)yield的使用,一開始我是使用調(diào)用一個(gè)新的函數(shù),然后在里面實(shí)現(xiàn)值的返回,但是麻煩還有一點(diǎn)小問題,所以這里我們就是用這種簡(jiǎn)單的方式就行了,yield將每次循環(huán)的數(shù)據(jù)返回,返回后再繼續(xù)執(zhí)行循環(huán)。
總結(jié)
以上就是本文關(guān)于python3使用scrapy生成csv文件代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Python實(shí)現(xiàn)一個(gè)Git日志統(tǒng)計(jì)分析的小工具
這篇文章主要給大家介紹了關(guān)于利用Python如何實(shí)現(xiàn)一個(gè)Git日志統(tǒng)計(jì)分析小工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
python實(shí)現(xiàn)替換word中的關(guān)鍵文字(使用通配符)
今天小編就為大家分享一篇python實(shí)現(xiàn)替換word中的關(guān)鍵文字(使用通配符),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能
這篇文章主要介紹了Django Admin實(shí)現(xiàn)上傳圖片校驗(yàn)功能的相關(guān)資料,需要的朋友可以參考下2016-03-03
python批量插入數(shù)據(jù)到mysql的3種方法
這篇文章主要給大家介紹了關(guān)于python批量插入數(shù)據(jù)到mysql的3種方法,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)庫(kù)的需求,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Python實(shí)現(xiàn)的微信公眾號(hào)群發(fā)圖片與文本消息功能實(shí)例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)的微信公眾號(hào)群發(fā)圖片與文本消息功能,結(jié)合實(shí)例形式詳細(xì)分析了Python調(diào)用微信接口實(shí)現(xiàn)微信公眾號(hào)群發(fā)圖片與文本消息的具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-06-06
python實(shí)現(xiàn)rar解壓和壓縮的方法(附源碼)
數(shù)據(jù)量現(xiàn)在越來越大,壓縮文件在日常生活中很常用,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)rar解壓和壓縮的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)在字典中將鍵映射到多個(gè)值上的方法
這篇文章主要介紹了Python在字典中將鍵映射到多個(gè)值上的方法,涉及Python針對(duì)字典的相關(guān)映射與初始化相關(guān)操作技巧,需要的朋友可以參考下2018-02-02

