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

主站蜘蛛池模板: 免费又黄又爽又猛大片午夜| 日韩精品亚洲精品第一页| 精品国产一区二区三区在线观看| YW尤物AV无码国产在线观看| 国产草草影院18成年视频| 666精品国产精品亚洲| 婷婷六月天激情| 亚洲高清免费在线观看| 国产靠逼视频| 在线精品自拍| 国产毛片高清一级国语 | 免费福利视频网站| 日韩第九页| 2020国产精品视频| 午夜啪啪福利| 国产黄在线观看| 成人午夜视频网站| 欧美激情视频在线观看一区| 免费Aⅴ片在线观看蜜芽Tⅴ| 全部免费特黄特色大片视频| 久久久久人妻一区精品| 亚洲婷婷在线视频| 欧美亚洲国产精品第一页| 欧美19综合中文字幕| 伊人久久大线影院首页| 国产精品久久国产精麻豆99网站| 无码高潮喷水专区久久| 婷婷六月色| 国产精品伦视频观看免费| 日韩欧美中文| 国产jizz| 亚洲人成成无码网WWW| 71pao成人国产永久免费视频| 亚洲开心婷婷中文字幕| 亚洲欧洲日韩综合色天使| 久久久久国产精品嫩草影院| 动漫精品啪啪一区二区三区| 亚洲成a人片77777在线播放 | 日韩AV手机在线观看蜜芽| 久久熟女AV| 国产精欧美一区二区三区| 免费无遮挡AV| 亚洲成人在线免费| 亚洲午夜综合网| 99re这里只有国产中文精品国产精品 | 国产在线91在线电影| 久久精品国产91久久综合麻豆自制| 在线观看精品自拍视频| 日韩国产精品无码一区二区三区 | 在线看片免费人成视久网下载| 国产麻豆精品手机在线观看| 欧美日韩中文字幕在线| 久久精品国产精品国产一区| 欧美亚洲欧美| 韩日免费小视频| 亚洲精选无码久久久| 国产av剧情无码精品色午夜| 97精品国产高清久久久久蜜芽| 国产网友愉拍精品| 亚洲小视频网站| 制服丝袜无码每日更新| 亚洲天堂视频在线免费观看| 波多野结衣的av一区二区三区| 久久综合伊人 六十路| 国产日韩欧美成人| 国产尹人香蕉综合在线电影 | 99精品免费在线| 亚洲日韩久久综合中文字幕| AV熟女乱| 熟妇人妻无乱码中文字幕真矢织江| 91精品视频播放| 亚洲成在人线av品善网好看| 制服丝袜一区二区三区在线| 国产精品午夜电影| 奇米精品一区二区三区在线观看| 毛片久久久| 为你提供最新久久精品久久综合| 99在线视频免费| 亚洲人成网址| 日本一区二区三区精品国产| 欧美一级一级做性视频| AV在线天堂进入|