激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務器之家 - 腳本之家 - Python - Python爬蟲框架Scrapy實戰之批量抓取招聘信息

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

2020-07-29 11:55HanTangSongMing Python

網絡爬蟲又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是按照一定的規則,自動抓取萬維網信息的程序或者腳本。這篇文章主要介紹Python爬蟲框架Scrapy實戰之批量抓取招聘信息,有需要的朋友可以參

網絡爬蟲抓取特定網站網頁的html數據,但是一個網站有上千上萬條數據,我們不可能知道網站網頁的url地址,所以,要有個技巧去抓取網站的所有html頁面。Scrapy是純Python實現的爬蟲框架,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便~

   Scrapy 使用wisted這個異步網絡庫來處理網絡通訊,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。整體架構如下圖所示:

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

    綠線是數據流向,首先從初始URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載之后會交給 Spider 進行分析,Spider分析出來的結果有兩種:一種是需要進一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會被傳回 Scheduler ;另一種是需要保存的數據,它們則被送到Item Pipeline 那里,那是對數據進行后期處理(詳細分析、過濾、存儲等)的地方。另外,在數據流動的通道里還可以安裝各種中間件,進行必要的處理。

我假定你已經安裝了Scrapy。假如你沒有安裝,你可以參考這篇文章。

在本文中,我們將學會如何使用Scrapy建立一個爬蟲程序,并爬取指定網站上的內容

1. 創建一個新的Scrapy Project
2. 定義你需要從網頁中提取的元素Item
3.實現一個Spider類,通過接口完成爬取URL和提取Item的功能
4. 實現一個Item PipeLine類,完成Item的存儲功能

我將會用騰訊招聘官網作為例子。
Github源碼:https://github.com/maxliaops/scrapy-itzhaopin

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

目標:抓取騰訊招聘官網職位招聘信息并保存為JSON格式。

新建工程

首先,為我們的爬蟲新建一個工程,首先進入一個目錄(任意一個我們用來保存代碼的目錄),執行:

 

復制代碼 代碼如下:

scrapy startprojectitzhaopin

 

最后的itzhaopin就是項目名稱。這個命令會在當前目錄下創建一個新目錄itzhaopin,結構如下:

├── itzhaopin
│   ├── itzhaopin
│   │   ├── __init__.py
│   │   ├── items.py
│   │   ├── pipelines.py
│   │   ├── settings.py
│   │   └── spiders
│   │      └── __init__.py
│   └── scrapy.cfg

scrapy.cfg: 項目配置文件
items.py: 需要提取的數據結構定義文件
pipelines.py:管道定義,用來對items里面提取的數據做進一步處理,如保存等
settings.py: 爬蟲配置文件
spiders: 放置spider的目錄

定義Item

在items.py里面定義我們要抓取的數據:

?
1
2
3
4
5
6
7
8
from scrapy.item import Item, Field
class TencentItem(Item):
  name = Field()        # 職位名稱
  catalog = Field()       # 職位類別
  workLocation = Field()    # 工作地點
  recruitNumber = Field()    # 招聘人數
  detailLink = Field()     # 職位詳情頁鏈接
  publishTime = Field()     # 發布時間

實現Spider

Spider是一個繼承自scrapy.contrib.spiders.CrawlSpider的Python類,有三個必需的定義的成員

name: 名字,這個spider的標識

start_urls:一個url列表,spider從這些網頁開始抓取

parse():一個方法,當start_urls里面的網頁抓取下來之后需要調用這個方法解析網頁內容,同時需要返回下一個需要抓取的網頁,或者返回items列表

所以在spiders目錄下新建一個spider,tencent_spider.py:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import re
import json
from scrapy.selector import Selector
try:
  from scrapy.spider import Spider
except:
  from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor as sle
from itzhaopin.items import *
from itzhaopin.misc.log import *
class TencentSpider(CrawlSpider):
  name = "tencent"
  allowed_domains = ["tencent.com"]
  start_urls = [
    "http://hr.tencent.com/position.php"
  ]
  rules = [ # 定義爬取URL的規則
    Rule(sle(allow=("/position.php\?&start=\d{,4}#a")), follow=True, callback='parse_item')
  ]
  def parse_item(self, response): # 提取數據到Items里面,主要用到XPath和CSS選擇器提取網頁數據
    items = []
    sel = Selector(response)
    base_url = get_base_url(response)
    sites_even = sel.css('table.tablelist tr.even')
    for site in sites_even:
      item = TencentItem()
      item['name'] = site.css('.l.square a').xpath('text()').extract()
      relative_url = site.css('.l.square a').xpath('@href').extract()[0]
      item['detailLink'] = urljoin_rfc(base_url, relative_url)
      item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()
      item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()
      item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()
      item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()
      items.append(item)
      #print repr(item).decode("unicode-escape") + '\n'
    sites_odd = sel.css('table.tablelist tr.odd')
    for site in sites_odd:
      item = TencentItem()
      item['name'] = site.css('.l.square a').xpath('text()').extract()
      relative_url = site.css('.l.square a').xpath('@href').extract()[0]
      item['detailLink'] = urljoin_rfc(base_url, relative_url)
      item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()
      item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()
      item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()
      item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()
      items.append(item)
      #print repr(item).decode("unicode-escape") + '\n'
    info('parsed ' + str(response))
    return items
  def _process_request(self, request):
    info('process ' + str(request))
    return request

實現PipeLine

PipeLine用來對Spider返回的Item列表進行保存操作,可以寫入到文件、或者數據庫等。

PipeLine只有一個需要實現的方法:process_item,例如我們將Item保存到JSON格式文件中:

pipelines.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
from scrapy import signals
import json
import codecs
class JsonWithEncodingTencentPipeline(object):
  def __init__(self):
    self.file = codecs.open('tencent.json', 'w', encoding='utf-8')
  def process_item(self, item, spider):
    line = json.dumps(dict(item), ensure_ascii=False) + "\n"
    self.file.write(line)
    return item
  def spider_closed(self, spider):
    self.file.close(
)

到現在,我們就完成了一個基本的爬蟲的實現,可以輸入下面的命令來啟動這個Spider

scrapy crawl tencent

爬蟲運行結束后,在當前目錄下將會生成一個名為tencent.json的文件,其中以JSON格式保存了職位招聘信息。
部分內容如下:

{"recruitNumber": ["1"], "name": ["SD5-資深手游策劃(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15626&keywords=&tid=0&lid=0", "publishTime":
["2014-04-25"], "catalog": ["產品/項目類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["TEG13-后臺開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15666&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["TEG12-數據中心高級經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15698&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["GY1-微信支付品牌策劃經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15710&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["市場類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["SNG06-后臺開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15499&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["OMG01-騰訊時尚視頻策劃編輯(北京)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15694&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["內容編輯類"], "workLocation": ["北京"]}

{"recruitNumber": ["1"], "name": ["HY08-QT客戶端Windows開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=11378&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["5"], "name": ["HY1-移動游戲測試經理(上海)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15607&keywords=&tid=0&lid=0", "publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["上海"]}

{"recruitNumber": ["1"], "name": ["HY6-網吧平臺高級產品經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=10974&keywords=&tid=0&lid=0", "publishTime": ["2014-04-25"], "catalog": ["產品/項目類"], "workLocation": ["深圳"]}

{"recruitNumber": ["4"], "name": ["TEG14-云存儲研發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15168&keywords=&tid=0&lid=0", "publishTime": ["2014-04-24"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["CB-薪酬經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=2309&keywords=&tid=0&lid=0", "publishTime": ["2013-11-28"], "catalog": ["職能類"], "workLocation": ["深圳"]}

以上全部內容就是通過Python爬蟲框架Scrapy實戰之批量抓取招聘信息的全部內容,希望對大家有所幫助,欲了解更多編程知識,請鎖定我們的網站,每天都有新的內容發布。

延伸 · 閱讀

精彩推薦
590
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 蜜桃成品人免费视频 | 久久99精品国产99久久6男男 | 国产91丝袜在线播放 | 成人片在线播放 | www.国产.com | 亚洲欧美日韩免费 | 色老师影院 | av在线免费观看不卡 | 91精品国产99久久久久久 | 精品人人人人 | 成人福利视频网站 | 特级a欧美做爰片毛片 | 操操影视 | av在线视 | 日韩视频高清 | 国产va在线观看 | 法国性hdfreexxxx人妖 | 2021国产精品 | 久久久线视频 | 久精品久久 | 99视频网| 一级黄色免费 | 午夜激情视频网站 | 久久久久久久.comav | 久久亚洲春色中文字幕久久 | 成人做爰高潮片免费视频韩国 | 午夜精品视频免费观看 | www深夜成人 | 极品销魂一区二区三区 | 国产免费一区 | 国产一区二区三区四区波多野结衣 | 国语自产免费精品视频在 | 国产精品久久久久久久久久iiiii | 成人久久久久久久久久 | 国产精品视频海角社区88 | 久久国产亚洲视频 | 男男羞羞视频网站国产 | 中文字幕亚洲一区二区三区 | 毛片视频网站在线观看 | 欧洲精品色 | 欧美成a人片在线观看久 |