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—),碩士,副教授,研究方向:數據挖掘。

主站蜘蛛池模板: 谁有在线观看日韩亚洲最新视频| 国产特一级毛片| 亚洲精品第一在线观看视频| 九色免费视频| 国产精品对白刺激| 久久99久久无码毛片一区二区| 极品国产在线| 国产成人久久综合一区| 韩日免费小视频| 国产黄视频网站| 毛片国产精品完整版| 欧美黑人欧美精品刺激| 一级毛片免费观看久| 国产精品久久久久久影院| 日本人又色又爽的视频| aaa国产一级毛片| 亚洲成人在线网| 人与鲁专区| 天堂亚洲网| 国产亚洲欧美另类一区二区| 亚洲国产精品无码AV| 欧美亚洲国产一区| 亚洲系列中文字幕一区二区| 国产亚洲精品自在久久不卡 | 亚洲国产成人综合精品2020| 欧洲高清无码在线| 麻豆精品久久久久久久99蜜桃| 精品剧情v国产在线观看| 波多野结衣无码AV在线| 夜夜拍夜夜爽| 午夜综合网| 99久久婷婷国产综合精| 国产女人18水真多毛片18精品| 国产资源站| 亚洲国产欧美中日韩成人综合视频| a色毛片免费视频| 久久婷婷综合色一区二区| 国产一区二区三区精品欧美日韩| 国产真实乱子伦视频播放| 国产在线无码av完整版在线观看| 中文字幕在线看| 中文字幕亚洲另类天堂| 亚洲天堂免费观看| 在线观看网站国产| 日本一区高清| 亚洲码在线中文在线观看| 国产精品第5页| 久久人人97超碰人人澡爱香蕉| 国产精品网址在线观看你懂的| 欧美亚洲国产一区| 丁香六月激情综合| 又爽又黄又无遮挡网站| 国产精品一线天| 91久久国产热精品免费| 制服丝袜无码每日更新| 中文字幕啪啪| 精品撒尿视频一区二区三区| 亚洲愉拍一区二区精品| 伊在人亞洲香蕉精品區| 99热最新在线| 91口爆吞精国产对白第三集| 在线观看国产精美视频| 欧美三级日韩三级| 国产网站免费观看| 97亚洲色综久久精品| 伦精品一区二区三区视频| 久久婷婷国产综合尤物精品| 日本在线欧美在线| 国产精品欧美日本韩免费一区二区三区不卡| 制服无码网站| 国产亚洲精品自在线| 国产综合无码一区二区色蜜蜜| 99在线免费播放| 国产成人久久综合777777麻豆 | 亚洲水蜜桃久久综合网站| 国产精品污视频| 伊人久久婷婷五月综合97色| 99re66精品视频在线观看| 婷婷综合在线观看丁香| 国产男女免费完整版视频| 国产伦片中文免费观看| 狠狠色婷婷丁香综合久久韩国|