999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于互聯網的爬蟲程序研究

2022-04-29 16:48:37郭銀芳韓凱郭峰明等
計算機應用文摘 2022年2期

郭銀芳 韓凱 郭峰明等

關鍵詞:聚焦爬蟲;搜索策略;scrapy框架;全站爬取;分布式爬取

中圖法分類號:TP39.3 文獻標識碼:A

1引言

假設有一個需求——需要得到一個電影介紹網站上的所有電影信息。由于不可能通過手動方式獲取大量的數據,因此需要通過分析網頁、編寫程序進行網頁數據的抓取。互聯網信息多種多樣,如果能夠及時了解職位的需求信息,就可以明確學習方向,就業率就會提高。本文以拉勾網為研究對象,對職業信息數據進行爬取并以可視化的結論說明就業需求。

2爬蟲的原理及其技術研究

2.1網絡爬蟲的原理

網絡爬蟲主要有兩種:一般爬蟲和聚焦爬蟲。一個完整的爬蟲一般包含如下三個模塊:網絡請求模塊、爬取流程控制模塊、內容分析提取模塊。對于聚焦爬蟲來說,這一過程所得到的分析結果還可能對以后的抓取過程給出反饋和指導。相對于通用網絡爬蟲,聚焦爬蟲必須解決三個問題:對抓取目標的描述或定義、對網頁或數據的分析與過濾、對URL的搜索策略。

2.2網絡爬蟲技術的分析

2.2.1發送請求

確定要爬取的網頁,然后發送請求,就會得到相應回應,其核心的幾個要素是:請求header和內容,響應header和內容,url。爬蟲首先需要一個初始的url(也可以說是一個網頁),將網頁的內容爬取后,如果要繼續爬取,則需要解析里面的鏈接。如同一棵樹形的結構,以初始url為根節點,其中每一個網頁又是一個節點。

在Scrapy中,需要在start_url中寫入待發送請求的url:https://www.lagou.com/wn/jobs?px=new&pn=1&kd=Java,并且使用瀏覽器的網頁抓包工具,在服務器的響應header中進行查找,以此確定是否有要獲取的信息。

2.2.2 Http請求

一個請求頭中包含很多信息——以簡單爬取為例,只需要寫上User?Agent。以下是瀏覽器請求頭的一部分,“User?Agent”:"Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4430.93Safari/537.36。"2.2.3 Cookie

一般在用戶登錄或者進行某些操作后,服務端會在返回包中列出Cookie信息要求瀏覽器設置Cookie。如果沒有Cookie,會很容易被辨別出來是偽造請求;由于基于該網站不需要登錄操作也可以獲取到需要的信息,可以不進行登錄操作。

2.2.4 JavaScript加密操作

2.2.5流程控制

所謂爬取流程,就是按照什么樣的規則順序去爬取。在爬取任務量不大的情況下,爬取的流程控制不會太繁瑣,很多爬取框架都事先幫用戶完成了上述步驟,如Scrapy,只需要自己輸入解析代碼。

在拉勾網中也有很多ajax技術,由于不是主要信息,在此不做分析。本文主要對html文檔本身的信息進行抓取,如Html文檔本身包含內容、JavaScript代碼加載內容。

處理動態網頁可以使用selenium模塊,使用該模塊可以得到一個瀏覽器對象,該對象會打開瀏覽器,并且可以得到網頁的全部源碼,而且對于處理ifram之類的動態模塊也可以簡單的切換串口來實現。

2.3 Scrapy概述

Scrapy使用了純python語言,實現了爬取網頁數據、解析數據、持久化存儲,為網絡爬蟲提供了非常便捷的模板。在請求網頁方面,也有類似于request或者urllib中的getpost請求。其中,網頁分析工具有etree對象中的xpath方法,而且比etree更加方便——可以在得到一個網頁的源碼之后,直接.xpath使用xpath表達式進行定位。在持久化存儲方面,使用管道存儲會更加方便??偟膩碚f,此框架繼承了多個模塊,使得爬蟲程序更加高效、方便。

2.4 Scrapy框架爬蟲系統的實現

首先創建一個工程,進入工程目錄后,再創建一個爬蟲文件,然后在爬蟲文件中編寫想爬取的起始網頁。由于一般的網站都會搭載UA檢測的反爬檢測程序,所以基本上每個爬蟲都應該進行爬蟲偽裝。

在新建的爬蟲文件中,我們會發現該文件屬于爬蟲類,它繼承了Scrapy的spider類,在類中可以增加相應的屬性。然后,在爬蟲文件的parse方法中,可以進行解析數據等相關操作以及使用xpath表達式。

在完成數據解析后,可以獲得想要的數據,此時要進行持久化存儲。同時,需要用到工程中的item對象,在item對象中寫入對應的屬性,然后在parse中把數據包裝為item對象,然后通過yield關鍵字進行提交,提交的數據會到達Scrapy中的管道類,最后在管道類中進行存儲。

3 基于拉勾網的Scrapy爬蟲實現的具體操作

3.1 拉勾網的網頁分析

首先,對起始url進行分析。通過瀏覽器對起始url進行訪問之后,可以利用瀏覽器抓包工具中的網絡模塊對網頁返回的源碼進行檢查——觀察是否有想要的數據。而通過搜索,可以發現在網頁源碼中有需要的標題、工資及學歷要求。

因為是進行全站爬取,所以需要找到所有頁面的url。通過在網頁源碼中進行尋找,可以發現url是隱藏的,由于不能在網頁中得到它,所以無法使用crawlspider進行爬取,此時可以使用spider進行直接爬取。為了得到網頁的所有url,通過分析可以發現,每頁只有一個參數pn不同,因此可以設置一個記錄page的變量。通過format可以得到所有的url,然后在parse中進行遞歸實現。而在start_url中,放入同一層級的url就可以得到所有的url。

url的結構都大致相同,所以可以使用同一個parse方法。

3.2具體代碼實現

要爬取拉勾網中的職位、工資和學歷要求,可以在pycharm中創建爬蟲工程,然后在爬蟲文件中進行以下主要代碼的編寫。

文件:lg.py

importscrapy

from lgPro.items import LgproItem

classLgSpider(scrapy.Spider):

name='lg'

allowed_domains=['www.xxx.com']

start_urls=['https://www.lagou.com/wn/jobs?

px=new&pn=1&kd=Java']

url='https://www.lagou.com/wn/jobs?px=

new&pn=%d&kd=Java'

page_Num=2

def__init__(self):

foriinrange(1,31):

self.start_urls.append(format(self.url%self.page_

Num))

defparse(self,response):

div_list=response.xpath('/html/body/div/div

[1]/div/div[2]/div[3]/div/div[1]/div')

fordivindiv_list:

title=div.xpath('./div[1]/div[1]/div[1]/a/

text()').extract_first()

salary=div.xpath('./div[1]/div[1]/div[2]//

text()').extract()

salary="".join(salary)

salary_and=salary.split('/')

salary=salary_and[0]

edu=salary_and[1]

print(title,salary)

item=LgproItem()

item["title"]=title

item["salary"]=salary

item["edu"]=edu

yielditem

在lg.py中進行請求和解析操作后,可以將得到

的數據提交到管道中。

在items,py中:

importscrapy

classLgproItem(scrapy.Item):

#definethefieldsforyouritemherelike:

title=scrapy.Field()

salary=scrapy.Field()

edu=scrapy.Field()

Pipeline:

fromopenpyxlimportWorkbook

最后,得到爬取結果——數據見圖1。

3.3數據可視化

使用百度智能云提供的工具,可以對數據進行可視化操作——結果見圖2。

3.4優化

如涉及大規模的抓取,需要有良好的爬蟲設計。一般而言,很多開源的爬蟲框架都有限制,因為中間涉及很多其他問題——數據結構、重復抓取過濾等。當然,最重要的是要把帶寬利用滿。

如果對一個較大的網站進行爬取,只用一臺機器的效率非常低。此時,可以創建一個分布式機群,據此對這一組資源進行分布聯合爬取。同時,需要安裝scrapy?redis組件(這是一個被嵌入在Scrapy框架中的數據庫)。此外,使用scrapy?redis可以給原生的scrapy框架提供被共享的管道和調度器。如果調度器和管道都是共享的,那么就可以實現多臺機器對同一個資源的爬取,并且能夠統一存儲。

所以,分布式抓取很重要。分布式抓取最重要的就是多臺機器不同線程的調度和配合,通常會共享一個url隊列,這個隊列可以在每臺機器上進行拋出。

4結語

從以上分析數據來看:對于Java方面的職業需求,開發工程師占很大的比例,架構師和技術主管則占很小的比例。

將爬取的數據進行可視化操作后,可以得到更加直觀的信息。而且數據量越大,數據就越精確。但在爬蟲的過程中,或許會遇到三個問題:交互問題,有些網頁會判斷發出請求是一個程序還是一個正常的用戶,由于添加了驗證碼(滑動滑塊之類的驗證),爬蟲程序遇到這種情況會比較難以處理;ip限制,有的網站會對請求頻率進行檢測,如果程序請求頻率過高,超過了服務器對某個ip的訪問次數限制,那么可能會對ip地址進行封禁,這也是一種反爬機制。后臺在進行爬取時,由于機器和ip有限,很容易達到上限而導致請求被拒絕。目前,主要的應對方案是使用代理,這樣一來ip的數量就會多一些,但代理ip依然有限;在網頁源代碼中,難以獲得更詳細的網頁url,如果想進一步提取到每個職位的詳情信息,需要繼續分析。

總之,按照Scrapy的爬蟲流程、基于網頁的分析,我們得到了想要的數據,證明基于拉勾網的爬蟲是可以實現的,而且使用的代碼并不算多;基于數據進行分析,我們得出了就業方面的需求。但就出現的問題,仍需繼續研究、探討。

作者簡介:

郭銀芳(1976—),碩士,副教授,研究方向:數據挖掘。

主站蜘蛛池模板: 国产欧美日韩专区发布| 在线国产91| 日本亚洲最大的色成网站www| 91视频精品| 婷婷色中文网| 91视频精品| 97视频免费在线观看| 三级国产在线观看| 亚洲成aⅴ人片在线影院八| 国产在线精品人成导航| 欧美不卡二区| 婷婷色一区二区三区| 污视频日本| 四虎永久在线| 国产精品男人的天堂| 亚洲中文字幕久久精品无码一区| 亚洲一级无毛片无码在线免费视频| 大香网伊人久久综合网2020| 人妻无码AⅤ中文字| 国产在线小视频| 色悠久久综合| 国产成人1024精品下载| 久久性视频| 亚洲性网站| 亚洲IV视频免费在线光看| 一本大道香蕉久中文在线播放| 激情乱人伦| 呦女亚洲一区精品| 欧美亚洲第一页| 91精品免费高清在线| 国产91视频免费观看| 六月婷婷综合| 国产18在线播放| 日韩在线视频网| 中国国产高清免费AV片| 69视频国产| 亚洲成人网在线观看| 国产呦精品一区二区三区下载| 高潮爽到爆的喷水女主播视频 | 亚洲V日韩V无码一区二区 | 97精品伊人久久大香线蕉| 国产97区一区二区三区无码| 日本www在线视频| 精品亚洲国产成人AV| 91精品啪在线观看国产| 午夜性刺激在线观看免费| 欧美黄网站免费观看| 欧美人与牲动交a欧美精品| 色亚洲激情综合精品无码视频| 欧美中文字幕无线码视频| 成年人视频一区二区| 人妻一区二区三区无码精品一区 | 亚洲欧美不卡视频| 福利一区在线| 国产人碰人摸人爱免费视频| 成人福利一区二区视频在线| 91青青草视频在线观看的| 国产麻豆aⅴ精品无码| 亚洲男人天堂网址| 国产毛片一区| 久久精品女人天堂aaa| 欧美激情视频二区| 国产欧美精品午夜在线播放| 2020国产精品视频| 在线欧美国产| 国产日本欧美在线观看| 国产精品三级av及在线观看| a毛片在线播放| 午夜视频日本| 国产sm重味一区二区三区| 99性视频| www.狠狠| 国产Av无码精品色午夜| a级毛片在线免费| 亚洲国产亚洲综合在线尤物| 2021天堂在线亚洲精品专区| 日本人妻一区二区三区不卡影院 | 国产流白浆视频| 91破解版在线亚洲| 国产日韩欧美成人| 国产精品吹潮在线观看中文| 97青草最新免费精品视频|