欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3使用scrapy生成csv文件代碼示例

 更新時間:2017年12月28日 14:07:11   作者:不論如何未來很美好  
這篇文章主要介紹了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ù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

最新評論