什么情況烁落?python這次居然被web scraper比下去了

周末乘粒,永恒君和一位B站網(wǎng)友討論交流了一下關于web scraper爬取網(wǎng)頁的問題豌注。今天來和各位分享一下,希望能給大家有幫助灯萍。

需求

1轧铁、爬取的網(wǎng)站地址:

http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=7bcf3b0574e320a487ada1f504759be4&s21=%E8%B5%94%E5%81%BF

2、需要抓取的信息

爬取文書列表內容旦棉,報告標題齿风、文號、日期绑洛、摘要等等信息救斑。

3、需要抓取多頁诊笤,比如說前10頁系谐。

分析網(wǎng)站的情況

1巾陕、抓取的頁面翻頁的時候讨跟,url是不會變的。而在頁面的源碼當中又找不到內容鄙煤,說明網(wǎng)頁是通過異步加載的晾匠。

2、打開F12梯刚,就會彈出下面的暫停提示凉馆,阻止后續(xù)的查看。沒事亡资,點擊右下角的取消斷點澜共,再運行即可。

3锥腻、點擊“network”嗦董,點擊網(wǎng)頁的第二頁,查看請求的數(shù)據(jù)瘦黑。

可以看到京革,是post請求,后面需要有一堆的參數(shù)

一般而言幸斥,通過這樣請求之后匹摇,可以獲取到真實的json文件,里面就包含了網(wǎng)頁中文書的列表當中甲葬,然而這次卻是不一樣廊勃,請求得到的居然是加密的信息,還需要通過一定方式來進行解密才行经窖。

到這里供搀,已經可以感受到網(wǎng)頁開發(fā)人員的“苦心”隅居,反爬的措施可謂是非常的多。不過葛虐,我還是在網(wǎng)上找到了一篇網(wǎng)友關于用python解決這上面問題的辦法和代碼胎源,有需要的時候可以參考一下。這里有些內容在自己的能力圈之外屿脐,就暫時不考慮了涕蚤。

https://blog.csdn.net/Since_you/article/details/100566633

web scraper爬取

用python比較復雜的話,那么就考慮用web scraper來試試的诵。

python爬取的效率當然高万栅,但是反爬的太厲害了,大部分的網(wǎng)站都會對python進行一定的限制和爬取西疤,這樣寫代碼的成本就無形增加了很多烦粒。

web scraper則不用考慮這么多,只要瀏覽器里面能看到數(shù)據(jù)代赁,就能夠進行爬取扰她。

回頭看看網(wǎng)站的情況:一是url不變,二是數(shù)據(jù)不在網(wǎng)頁源碼當中芭碍。那么就考慮“動態(tài)加載進行翻頁”的這種情況徒役,之前永恒君寫過這個教程:

傳送門在這里

主要配置如圖:

關鍵點就是"selector type"和"click selector"的配置

"selector type"(用于選擇網(wǎng)頁中的文書列表)選擇"Element click"
"click selector"(用于翻頁)這里需要注意,一般如果是直接在網(wǎng)頁點選的話窖壕,得到的css代碼是這樣的

.left_7_3?a:nth-of-type(n+2)

表示的意思就是從第二個翻頁器(上一頁為第一個忧勿,1為第二個)開始點擊,一直到最后一個瞻讽。

因為這個url有非常多的頁鸳吸,比如,如果希望只取前5頁的話速勇,可以如下更改:

.left_7_3?a:nth-of-type(-n+6)

n的取值是從0開始的晌砾。

然后再在這個選擇器下面,配置標題快集、文號贡羔、日期、摘要的選擇器个初。

最終的結構圖就是這樣的:

爬取的過程及結果就是這樣的:


這個方法相對python而言乖寒,節(jié)省的時間可不止一點點,結果基本上一致院溺。

這里把上面的web scraper的配置也分享一下:

{"_id":"caipan","startUrl":["http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=7bcf3b0574e320a487ada1f504759be4&s21=%E8%B5%94%E5%81%BF"],"selectors":[{"id":"list","type":"SelectorElementClick","parentSelectors":["_root"],"selector":"div.LM_list:nth-of-type(n+3)","multiple":true,"delay":0,"clickElementSelector":".left_7_3?a:nth-of-type(-n+4)","clickType":"clickOnce","discardInitialElements":"do-not-discard","clickElementUniquenessType":"uniqueText"},{"id":"title","type":"SelectorLink","parentSelectors":["list"],"selector":"a.caseName","multiple":false,"delay":0},{"id":"number","type":"SelectorText","parentSelectors":["list"],"selector":"span.ah","multiple":false,"regex":"","delay":0},{"id":"date","type":"SelectorText","parentSelectors":["list"],"selector":"span.cprq","multiple":false,"regex":"","delay":0},{"id":"content","type":"SelectorText","parentSelectors":["list"],"selector":"p","multiple":false,"regex":"","delay":0}]}

批量下載word文書

每個文書都提供有word下載的鏈接楣嘁,但是實現(xiàn)批量下載還是有一點困難。

1、word的下載鏈接直接在按鈕或者網(wǎng)頁源碼里面是提取不到的逐虚,是需要根據(jù)文書的url中的"docId"參數(shù)來構造的聋溜,即

http://wenshu.court.gov.cn/down/one?”?+?docID地址

例如:

爬取到的文書的詳細頁地址為:

http://wenshu.court.gov.cn/website/wenshu/181107ANFZ0BXSK4/index.html?docId=f9ffb134f0cb4a2ab832abea01298704

那么下載地址就是:

http://wenshu.court.gov.cn/down/one?docId=f9ffb134f0cb4a2ab832abea01298704

2、有了這個地址之后叭爱,原本以為可以直接用迅雷撮躁、IDM等軟件來批量下載,但是很顯然买雾,網(wǎng)站的開發(fā)人員限制了把曼。經過不同方法的驗證,發(fā)現(xiàn)目前只能是通過瀏覽器來挨個下載漓穿。(另外嗤军,可能可以通過python設置各種反爬的方法來實現(xiàn)批量下載的目的,但是工程量比較大晃危,我沒試驗成功叙赚,理論上應該是可的。)

那么就用了最笨的方法僚饭,借助python來模擬鼠標鍵盤的操作震叮,將url批量的輸入到瀏覽器當中,實現(xiàn)批量下載浪慌。

下面是單次下載的代碼冤荆,批量的話只需要讀取web scraper爬取的文件朴则,構造好url权纤,通過一個循環(huán),依次輸入下載即可乌妒。

import?time
import?pyautogui

time.sleep(1)
url_position?=?(160,?50)?#url位置

def?input_id(x,y,url):?#輸入url的動作
????pyautogui.moveTo(x,?y,?duration=0.2)??#0.25表示完成移動的時間??????????
????pyautogui.click(button='left')
????time.sleep(0.5)
????pyautogui.typewrite(url,0.01)#輸入字符汹想,0.1表示輸入每個字符間隔的時間
????time.sleep(0.5)
????pyautogui.press("enter")

url1?=?"http://wenshu.court.gov.cn/down/one?docId=694b012a59e34ae19967abeb00d512dc"

input_id(url_position[0],url_position[1],url1)


小結一下:

1、python固然強大撤蚊,但是有時用web scraper可以效率更高古掏,節(jié)省更多的時間。

2侦啸、web scraper爬取url不變槽唾、異步加載的網(wǎng)頁,關鍵是"selector type"和"click selector"的配置光涂,可以參考永恒君之前分享web scraper的教程庞萍。

3、python可以通過pyautogui庫忘闻,來實現(xiàn)自動化操作任意鼠標钝计、鍵盤的操作牍疏。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市船惨,隨后出現(xiàn)的幾起案子麦萤,更是在濱河造成了極大的恐慌,老刑警劉巖本鸣,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫衩,死亡現(xiàn)場離奇詭異,居然都是意外死亡荣德,警方通過查閱死者的電腦和手機隧土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來命爬,“玉大人曹傀,你說我怎么就攤上這事∷峭穑” “怎么了皆愉?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艇抠。 經常有香客問我幕庐,道長,這世上最難降的妖魔是什么家淤? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任异剥,我火速辦了婚禮,結果婚禮上絮重,老公的妹妹穿的比我還像新娘冤寿。我一直安慰自己,他們只是感情好青伤,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布督怜。 她就那樣靜靜地躺著,像睡著了一般狠角。 火紅的嫁衣襯著肌膚如雪号杠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天丰歌,我揣著相機與錄音姨蟋,去河邊找鬼。 笑死立帖,一個胖子當著我的面吹牛眼溶,可吹牛的內容都是我干的。 我是一名探鬼主播厘惦,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼偷仿,長吁一口氣:“原來是場噩夢啊……” “哼哩簿!你這毒婦竟也來了?” 一聲冷哼從身側響起酝静,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤节榜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后别智,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宗苍,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年薄榛,在試婚紗的時候發(fā)現(xiàn)自己被綠了讳窟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡敞恋,死狀恐怖丽啡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情硬猫,我是刑警寧澤补箍,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站啸蜜,受9級特大地震影響坑雅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜衬横,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一裹粤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜂林,春花似錦遥诉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挫酿。三九已至构眯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間早龟,已是汗流浹背惫霸。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葱弟,地道東北人壹店。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像芝加,于是被迫代替她去往敵國和親硅卢。 傳聞我的和親對象是個殘疾皇子射窒,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361