成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何快速掌握Python數(shù)據(jù)采集與網(wǎng)絡(luò)爬蟲技術(shù)

W4n9Hu1 / 2144人閱讀

摘要:通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實(shí)戰(zhàn)練習(xí),寫出一些簡(jiǎn)單的爬蟲項(xiàng)目。從技術(shù)手段來說,網(wǎng)絡(luò)爬蟲有多種實(shí)現(xiàn)方案,如。二網(wǎng)絡(luò)爬蟲技術(shù)基礎(chǔ)在本次課中,將使用技術(shù)手段進(jìn)行項(xiàng)目的編寫。

摘要:本文詳細(xì)講解了python網(wǎng)絡(luò)爬蟲,并介紹抓包分析等技術(shù),實(shí)戰(zhàn)訓(xùn)練三個(gè)網(wǎng)絡(luò)爬蟲案例,并簡(jiǎn)單補(bǔ)充了常見的反爬策略與反爬攻克手段。通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實(shí)戰(zhàn)練習(xí),寫出一些簡(jiǎn)單的爬蟲項(xiàng)目。

演講嘉賓簡(jiǎn)介:
韋瑋,企業(yè)家,資深I(lǐng)T領(lǐng)域?qū)<?講師/作家,暢銷書《精通Python網(wǎng)絡(luò)爬蟲》作者,阿里云社區(qū)技術(shù)專家。

本次直播視頻精彩回顧,戳這里!
本節(jié)課(爬蟲)所有代碼下載

以下內(nèi)容根據(jù)演講嘉賓視頻分享以及PPT整理而成。

本次的分享主要圍繞以下五個(gè)方面:

一、數(shù)據(jù)采集與網(wǎng)絡(luò)爬蟲技術(shù)簡(jiǎn)介
二、網(wǎng)絡(luò)爬蟲技術(shù)基礎(chǔ)
三、抓包分析
四、挑戰(zhàn)案例
五、推薦內(nèi)容

一、數(shù)據(jù)采集與網(wǎng)絡(luò)爬蟲技術(shù)簡(jiǎn)介

網(wǎng)絡(luò)爬蟲是用于數(shù)據(jù)采集的一門技術(shù),可以幫助我們自動(dòng)地進(jìn)行信息的獲取與篩選。從技術(shù)手段來說,網(wǎng)絡(luò)爬蟲有多種實(shí)現(xiàn)方案,如PHP、Java、Python ...。那么用python 也會(huì)有很多不同的技術(shù)方案(Urllib、requests、scrapy、selenium...),每種技術(shù)各有各的特點(diǎn),只需掌握一種技術(shù),其它便迎刃而解。同理,某一種技術(shù)解決不了的難題,用其它技術(shù)或方依然無法解決。網(wǎng)絡(luò)爬蟲的難點(diǎn)并不在于網(wǎng)絡(luò)爬蟲本身,而在于網(wǎng)頁(yè)的分析與爬蟲的反爬攻克問題。希望在本次課程中大家可以領(lǐng)會(huì)爬蟲中相對(duì)比較精髓的內(nèi)容。

二、網(wǎng)絡(luò)爬蟲技術(shù)基礎(chǔ)

在本次課中,將使用Urllib技術(shù)手段進(jìn)行項(xiàng)目的編寫。同樣,掌握了該技術(shù)手段,其他的技術(shù)手段也不難掌握,因?yàn)榕老x的難點(diǎn)不在于技術(shù)手段本身。本知識(shí)點(diǎn)包括如下內(nèi)容:

Urllib基礎(chǔ)

瀏覽器偽裝

用戶代理池

糗事百科爬蟲實(shí)戰(zhàn)

需要提前具備的基礎(chǔ)知識(shí):正則表達(dá)式

1)Urllib基礎(chǔ)
爬網(wǎng)頁(yè)
打開python命令行界面,兩種方法:ulropen()爬到內(nèi)存,urlretrieve()爬到硬盤文件。

>>> import urllib.request
#open百度,讀取并爬到內(nèi)存中,解碼(ignore可忽略解碼中的細(xì)微錯(cuò)誤), 并賦值給data
>>> data=urllib.request.ulropen("http://www.baidu.com").read().decode("utf-8”, “ignore")
#判斷網(wǎng)頁(yè)內(nèi)的數(shù)據(jù)是否存在,通過查看data長(zhǎng)度
>>> len(data)
提取網(wǎng)頁(yè)標(biāo)題
#首先導(dǎo)入正則表達(dá)式, .*?代表任意信息,()代表要提取括號(hào)內(nèi)的內(nèi)容
>>> import re
#正則表達(dá)式
>>> pat="(.*?)"
#re.compile()指編譯正則表達(dá)式
#re.S是模式修正符,網(wǎng)頁(yè)信息往往包含多行內(nèi)容,re.S可以消除多行影響
>>> rst=re.compile(pat,re.S).findall(data)
>>> print(rst)
#[‘百度一下,你就知道’]

同理,只需換掉網(wǎng)址可爬取另一個(gè)網(wǎng)頁(yè)內(nèi)容

>>> data=urllib.request.ulropen("http://www.jd.com").read().decode("utf-8", "ignore")
>>> rst=re.compile(pat,re.S).findall(data)
>>> print(rst)

上面是將爬到的內(nèi)容存在內(nèi)存中,其實(shí)也可以存在硬盤文件中,使用urlretrieve()方法

>>> urllib.request.urlretrieve("http://www.jd.com",filename="D:/我的教學(xué)/Python/阿里云系列直播/第2次直播代碼/test.html")

之后可以打開test.html,京東網(wǎng)頁(yè)就出來了。由于存在隱藏?cái)?shù)據(jù),有些數(shù)據(jù)信息和圖片無法顯示,可以使用抓包分析進(jìn)行獲取。

2)瀏覽器偽裝
嘗試用上面的方法去爬取糗事百科網(wǎng)站url="https://www.qiushibaike.com/",會(huì)返回拒絕訪問的回復(fù),但使用瀏覽器卻可以正常打開。那么問題肯定是出在爬蟲程序上,其原因在于爬蟲發(fā)送的請(qǐng)求頭所導(dǎo)致。
打開糗事百科頁(yè)面,如下圖,通過F12,找到headers,這里主要關(guān)注用戶代理User-Agent字段。User-Agent代表是用什么工具訪問糗事百科網(wǎng)站的。不同瀏覽器的User-Agent值是不同的。那么就可以在爬蟲程序中,將其偽裝成瀏覽器。

將User-Agent設(shè)置為瀏覽器中的值,雖然urlopen()不支持請(qǐng)求頭的添加,但是可以利用opener進(jìn)行addheaders,opener是支持高級(jí)功能的管理對(duì)象。代碼如下:

#瀏覽器偽裝
url="https://www.qiushibaike.com/"
#構(gòu)建opener
opener=urllib.request.build_opener()
#User-Agent設(shè)置成瀏覽器的值
UA=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")

#將UA添加到headers中
opener.addheaders=[UA]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

3)用戶代理池
在爬取過程中,一直用同樣一個(gè)地址爬取是不可取的。如果每一次訪問都是不同的用戶,對(duì)方就很難進(jìn)行反爬,那么用戶代理池就是一種很好的反爬攻克的手段。
第一步,收集大量的用戶代理User-Agent

#用戶代理池
uapools=[
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    ]

第二步,建立函數(shù)UA(),用于切換用戶代理User-Agent

def UA():
    opener=urllib.request.build_opener()
    #從用戶代理池中隨機(jī)選擇一個(gè)
    thisua=random.choice(uapools)
    ua=("User-Agent",thisua)
    opener.addheaders=[ua]
    urllib.request.install_opener(opener)
    print("當(dāng)前使用UA:"+str(thisua))

for循環(huán),每訪問一次切換一次UA

for i in range(0,10):
    UA()
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

每爬3次換一次UA

for i in range(0,10):
    if(i%3==0):
        UA()
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

(*每幾次做某件事情,利用求余運(yùn)算)

4)第一項(xiàng)練習(xí)-糗事百科爬蟲實(shí)戰(zhàn)
目標(biāo)網(wǎng)站:https://www.qiushibaike.com/
需要把糗事百科中的熱門段子爬取下來,包括翻頁(yè)之后內(nèi)容,該如何獲???

第一步,對(duì)網(wǎng)址進(jìn)行分析,如下圖所示,發(fā)現(xiàn)翻頁(yè)之后變化的部分只是page后面的頁(yè)面數(shù)字。

第二步,思考如何提取某個(gè)段子?查看網(wǎng)頁(yè)代碼,如下圖所示,可以發(fā)現(xiàn)

的數(shù)量和每頁(yè)段子數(shù)量相同,可以用
這個(gè)標(biāo)識(shí)提取出每條段子信息。


第三步,利用上面所提到的用戶代理池進(jìn)行爬取。首先建立用戶代理池,從用戶代理池中隨機(jī)選擇一項(xiàng),設(shè)置UA。

import urllib.request
import re
import random
#用戶代理池
uapools=[
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    ]
def UA():
    opener=urllib.request.build_opener()
    thisua=random.choice(uapools)
    ua=("User-Agent",thisua)
    opener.addheaders=[ua]
    urllib.request.install_opener(opener)
    print("當(dāng)前使用UA:"+str(thisua))
#for循環(huán),爬取第1頁(yè)到第36頁(yè)的段子內(nèi)容
for i in range(0,35):
    UA()
    #構(gòu)造不同頁(yè)碼對(duì)應(yīng)網(wǎng)址
    thisurl="http://www.qiushibaike.com/8hr/page/"+str(i+1)+"/"
    data=urllib.request.urlopen(thisurl).read().decode("utf-8","ignore")
    #利用
提取段子內(nèi)容 pat="
.*?(.*?).*?
" rst=re.compile(pat,re.S).findall(data) for j in range(0,len(rst)): print(rst[j]) print("-------")

還可以定時(shí)的爬?。?/p>

Import time
#然后在后面調(diào)用time.sleep()方法

換言之,學(xué)習(xí)爬蟲需要靈活變通的思想,針對(duì)不同的情況,不同的約束而靈活運(yùn)用。

三、抓包分析

抓包分析可以將網(wǎng)頁(yè)中的訪問細(xì)節(jié)信息取出。有時(shí)會(huì)發(fā)現(xiàn)直接爬網(wǎng)頁(yè)時(shí)是無法獲取到目標(biāo)數(shù)據(jù)的,因?yàn)檫@些數(shù)據(jù)做了隱藏,此時(shí)可以使用抓包分析的手段進(jìn)行分析,并獲取隱藏?cái)?shù)據(jù)。
1)Fiddler簡(jiǎn)介
抓包分析可以直接使用瀏覽器F12進(jìn)行,也可以使用一些抓包工具進(jìn)行,這里推薦Fiddler。Fiddler下載安裝。假設(shè)給Fiddler配合的是火狐瀏覽器,打開瀏覽器,如下圖,找到連接設(shè)置,選擇手動(dòng)代理設(shè)置并確定。

假設(shè)打開百度,如下圖,加載的數(shù)據(jù)包信息就會(huì)在Fiddler中左側(cè)列表中列出來,那么網(wǎng)站中隱藏相關(guān)的數(shù)據(jù)可以從加載的數(shù)據(jù)包中找到。

2)第二項(xiàng)練習(xí)-騰訊視頻評(píng)論爬蟲實(shí)戰(zhàn)
目標(biāo)網(wǎng)站:https://v.qq.com/
需要獲取的數(shù)據(jù):某部電影的評(píng)論數(shù)據(jù),實(shí)現(xiàn)自動(dòng)加載。

首先可以發(fā)現(xiàn)騰訊視頻中某個(gè)視頻的評(píng)論,在下面的圖片中,如果點(diǎn)擊”查看更多評(píng)論”,網(wǎng)頁(yè)地址并無變化,與上面提到的糗事百科中的頁(yè)碼變化不同。而且通過查看源代碼,只能看到部分評(píng)論。即評(píng)論信息是動(dòng)態(tài)加載的,那么該如何爬取多頁(yè)的評(píng)論數(shù)據(jù)信息?

第一步,分析騰訊視頻評(píng)論網(wǎng)址變化規(guī)律。點(diǎn)擊”查看更多評(píng)論”,同時(shí)打開Fiddler,第一條信息的TextView中,TextView中可以看到對(duì)應(yīng)的content內(nèi)容是unicode編碼,剛好對(duì)應(yīng)的是某條評(píng)論的內(nèi)容。

解碼出來可以看到對(duì)應(yīng)評(píng)論內(nèi)容。

將第一條信息的網(wǎng)址復(fù)制出來進(jìn)行分析,觀察其中的規(guī)律。下圖是兩個(gè)緊連著的不同評(píng)論的url地址,如下圖,可以發(fā)現(xiàn)只有cursor字段發(fā)生變化,只要得到cursor,那么評(píng)論的地址就可以輕松獲得。如何找到cursor值?

第二步,查找網(wǎng)址中變化的cursor字段值。從上面的第一條評(píng)論信息里尋找,發(fā)現(xiàn)恰好在last字段值與后一條評(píng)論的cursor值相同。即表示cursor的值是迭代方式生成的,每條評(píng)論的cursor信息在其上一條評(píng)論的數(shù)據(jù)包中尋找即可。

第三步,完整代碼
a.騰訊視頻評(píng)論爬蟲:獲取”深度解讀”評(píng)論內(nèi)容(單頁(yè)評(píng)論爬蟲)

#單頁(yè)評(píng)論爬蟲
import urllib.request
import re
#https://video.coral.qq.com/filmreviewr/c/upcomment/[視頻id]?commentid=[評(píng)論id]&reqnum=[每次提取的評(píng)論的個(gè)數(shù)]
#視頻id
vid="j6cgzhtkuonf6te"
#評(píng)論id
cid="6233603654052033588"
num="20"
#構(gòu)造當(dāng)前評(píng)論網(wǎng)址
url="https://video.coral.qq.com/filmreviewr/c/upcomment/"+vid+"?commentid="+cid+"&reqnum="+num
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
        "Content-Type":"application/javascript",
         }
opener=urllib.request.build_opener()
headall=[]
for key,value in headers.items():
    item=(key,value)
    headall.append(item)
opener.addheaders=headall
urllib.request.install_opener(opener)
#爬取當(dāng)前評(píng)論頁(yè)面
data=urllib.request.urlopen(url).read().decode("utf-8")
titlepat=""title":"(.*?)""
commentpat=""content":"(.*?)""
titleall=re.compile(titlepat,re.S).findall(data)
commentall=re.compile(commentpat,re.S).findall(data)
for i in range(0,len(titleall)):
    try:
        print("評(píng)論標(biāo)題是:"+eval("u""+titleall[i]+"""))
        print("評(píng)論內(nèi)容是:"+eval("u""+commentall[i]+"""))
        print("------")
    except Exception as err:
        print(err)

b.騰訊視頻評(píng)論爬蟲:獲取”深度解讀”評(píng)論內(nèi)容(自動(dòng)切換下一頁(yè)評(píng)論的爬蟲)

#自動(dòng)切換下一頁(yè)評(píng)論的爬蟲
import urllib.request
import re
#https://video.coral.qq.com/filmreviewr/c/upcomment/[視頻id]?commentid=[評(píng)論id]&reqnum=[每次提取的評(píng)論的個(gè)數(shù)]
vid="j6cgzhtkuonf6te"
cid="6233603654052033588"
num="3"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
        "Content-Type":"application/javascript",
         }
opener=urllib.request.build_opener()
headall=[]
for key,value in headers.items():
    item=(key,value)
    headall.append(item)
opener.addheaders=headall
urllib.request.install_opener(opener)
#for循環(huán),多個(gè)頁(yè)面切換
for j in range(0,100):
    #爬取當(dāng)前評(píng)論頁(yè)面
    print("第"+str(j)+"頁(yè)")
#構(gòu)造當(dāng)前評(píng)論網(wǎng)址thisurl="https://video.coral.qq.com/filmreviewr/c/upcomment/"+vid+"?commentid="+cid+
"&reqnum="+num
 data=urllib.request.urlopen(thisurl).read().decode("utf-8")
 titlepat=""title":"(.*?)","abstract":""
 commentpat=""content":"(.*?)""
 titleall=re.compile(titlepat,re.S).findall(data)
 commentall=re.compile(commentpat,re.S).findall(data)
 lastpat=""last":"(.*?)""
 #獲取last值,賦值給cid,進(jìn)行評(píng)論id切換
 cid=re.compile(lastpat,re.S).findall(data)[0]
 for i in range(0,len(titleall)):
    try:
       print("評(píng)論標(biāo)題是:"+eval("u""+titleall[i]+"""))
       print("評(píng)論內(nèi)容是:"+eval("u""+commentall[i]+"""))
       print("------")
    except Exception as err:
       print(err)
四、挑戰(zhàn)案例

1)第三項(xiàng)練習(xí)-中國(guó)裁判文書網(wǎng)爬蟲實(shí)戰(zhàn)
目標(biāo)網(wǎng)站:http://wenshu.court.gov.cn/
需要獲取的數(shù)據(jù):2018年上海市的刑事案件接下來進(jìn)入實(shí)戰(zhàn)講解。

第一步,觀察換頁(yè)之后的網(wǎng)頁(yè)地址變化規(guī)律。打開中國(guó)裁判文書網(wǎng)2018年上海市刑事案件的第一頁(yè),在換頁(yè)時(shí),如下圖中的地址,發(fā)現(xiàn)網(wǎng)址是完全不變的,這種情況就是屬于隱藏,使用抓包分析進(jìn)行爬取。

第二步,查找變化字段。從Fiddler中可以找到,獲取某頁(yè)的文書數(shù)據(jù)的地址:http://wenshu.court.gov.cn/Li...
可以發(fā)現(xiàn)沒有對(duì)應(yīng)的網(wǎng)頁(yè)變換,意味著中國(guó)裁判文書網(wǎng)換頁(yè)是通過POST進(jìn)行請(qǐng)求,對(duì)應(yīng)的變化數(shù)據(jù)不顯示在網(wǎng)址中。通過F12查看網(wǎng)頁(yè)代碼,再換頁(yè)操作之后,如下圖,查看ListContent,其中有幾個(gè)字段需要了解:
Param:檢索條件
Index:頁(yè)碼
Page:每頁(yè)展示案件數(shù)量
...
重要的是最后三個(gè)字段(vl5x,number,guid)該如何獲?。渴紫?,guid即uuid,叫全球唯一標(biāo)識(shí),是利用python中的uuid隨機(jī)生成的字段。其次是number字段,找到ListContent上面的GetCode請(qǐng)求,恰好其Response中包含了number字段的值。而GetCode又是通過POST請(qǐng)求的,發(fā)現(xiàn)請(qǐng)求的字段只要guid這一項(xiàng),那么問題便迎刃而解。


最后,難點(diǎn)在于vl5x字段如何獲???打開Fiddler,在換頁(yè)操作后,查看ListContent中的vl5x的值,并在此次ListContent之前出現(xiàn)的數(shù)據(jù)包中的TextView里尋找這個(gè)字段或值,一般的網(wǎng)站可以很容易找到,但中國(guó)裁判文書網(wǎng)是政府網(wǎng)站,反爬策略非常高明,尋找的過程需要極高的耐心。
事實(shí)上,中國(guó)裁判文書網(wǎng)的vl5x字段可以從某個(gè)js包中獲得,獲取的方式是通過getKey()函數(shù)。從網(wǎng)頁(yè)源代碼中找到getKey()函數(shù)的js代碼,由于代碼是packed狀態(tài),用unpacked工具, 將其進(jìn)行解碼,后利用js界面美觀工具可以方便理解。
但無關(guān)緊要,只需直接將getKey()函數(shù)s代碼復(fù)制到unpack_js.html中,就可以解出vl5x字段的值,其中需要用到Cookie中的vjkl5字段值。需要注意提前下載好base64.js和md5.js,并在unpack_js.html加載。

第三步,以下是中國(guó)裁判文書網(wǎng)爬蟲完整代碼:

import urllib.request
import re
import http.cookiejar
import execjs
import uuid
#隨機(jī)生成guid
guid=uuid.uuid4()
print("guid:"+str(guid))
fh=open("./base64.js","r")
js1=fh.read()
fh.close()
fh=open("./md5.js","r")
js2=fh.read()
fh.close()
fh=open("./getkey.js","r")
js3=fh.read()
fh.close()
#將完整js代碼都加載進(jìn)來
js_all=js1+js2+js3
#在生成的CookieJar添加到opner中
cjar=http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#Referer常用于反爬,指來源網(wǎng)址
opener.addheaders=[("Referer","http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82")]
urllib.request.install_opener(opener)
#用戶代理池
import random
uapools=[
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
]
#訪問首頁(yè)
urllib.request.urlopen("http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82").read().decode("utf-8","ignore")
#將Cookie中的vjkl5字段提取出來
pat="vjkl5=(.*?)s"
vjkl5=re.compile(pat,re.S).findall(str(cjar))
if(len(vjkl5)>0):
    vjkl5=vjkl5[0]
else:
    vjkl5=0
print("vjkl5:"+str(vjkl5))
#將js代碼中的舊Cookie的值替換為新的vjkl5的值
js_all=js_all.replace("ce7c8849dffea151c0179187f85efc9751115a7b",str(vjkl5))
#使用python執(zhí)行js代碼,請(qǐng)?zhí)崆鞍惭b好對(duì)應(yīng)模塊(在命令行中執(zhí)行pip install pyexejs)
compile_js=execjs.compile(js_all)
#獲得vl5x字段值
vl5x=compile_js.call("getKey")
print("vl5x:"+str(vl5x))
url="http://wenshu.court.gov.cn/List/ListContent"
#for循環(huán),切換第1頁(yè)到10頁(yè)
for i in range(0,10):
try:
    #從GetCode中獲取number字段值
        codeurl="http://wenshu.court.gov.cn/ValiCode/GetCode"
        #上面提到,GetCode中,只要guid一個(gè)字段,將其獲取到
        codedata=urllib.parse.urlencode({
                                "guid":guid,
                                }).encode("utf-8")
        codereq = urllib.request.Request(codeurl,codedata)
        codereq.add_header("User-Agent",random.choice(uapools))
        codedata=urllib.request.urlopen(codereq).read().decode("utf-8","ignore")
        #print(codedata)
        #構(gòu)造請(qǐng)求的參數(shù)
        postdata =urllib.parse.urlencode({
                                "Param":"案件類型:刑事案件,裁判年份:2018,法院地域:上海市",
                                "Index":str(i+1),
                                "Page":"20",
                                "Order":"法院層級(jí)",
                                "Direction":"asc",
                                "number":str(codedata),
                                "guid":guid,
                                "vl5x":vl5x,
                                }).encode("utf-8")
        #直接發(fā)送POST請(qǐng)求
        req = urllib.request.Request(url,postdata)
        req.add_header("User-Agent",random.choice(uapools))
        #獲得ListContent中的文書ID值
        data=urllib.request.urlopen(req).read().decode("utf-8","ignore")
        pat="文書ID.*?".*?"(.*?).""
        allid=re.compile(pat).findall(data)
        print(allid)
    except Exception as err:
        print(err)

如此便可批量獲取中國(guó)裁判文書網(wǎng)中的案件信息。友情提示,如果頻繁爬取該網(wǎng)站,需擴(kuò)充用戶代理池。

五、推薦內(nèi)容

1)常見反爬策略與反爬攻克手段介紹
數(shù)據(jù)的隱藏可以算是一種反爬策略之一,抓包分析是該反爬策略常見的反爬攻克手段。
當(dāng)然,反爬還有很多手段,比如通過IP限制、UA限制、驗(yàn)證碼限制...等等.
2)如何深入學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲(深入學(xué)習(xí)路線介紹)
通過上述的介紹,相信對(duì)網(wǎng)絡(luò)爬蟲已經(jīng)有了基礎(chǔ)的了解,以及能夠?qū)懗鲆恍┖?jiǎn)單的爬蟲項(xiàng)目。
以下項(xiàng)目可以提供練習(xí):
淘寶商品圖片爬蟲項(xiàng)目
淘寶商品爬蟲項(xiàng)目

3)關(guān)于Python爬蟲,推薦書籍
《Python程序設(shè)計(jì)基礎(chǔ)實(shí)戰(zhàn)教程》 . 清華大學(xué)出版社.2018年
《精通Python網(wǎng)絡(luò)爬蟲》.機(jī)械工業(yè)出版社.2017年4月

閱讀原文

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41513.html

相關(guān)文章

  • 精通Python網(wǎng)絡(luò)爬蟲(0):網(wǎng)絡(luò)爬蟲學(xué)習(xí)路線

    摘要:以上是如果你想精通網(wǎng)絡(luò)爬蟲的學(xué)習(xí)研究路線,按照這些步驟學(xué)習(xí)下去,可以讓你的爬蟲技術(shù)得到非常大的提升。 作者:韋瑋 轉(zhuǎn)載請(qǐng)注明出處 隨著大數(shù)據(jù)時(shí)代的到來,人們對(duì)數(shù)據(jù)資源的需求越來越多,而爬蟲是一種很好的自動(dòng)采集數(shù)據(jù)的手段。 那么,如何才能精通Python網(wǎng)絡(luò)爬蟲呢?學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲的路線應(yīng)該如何進(jìn)行呢?在此為大家具體進(jìn)行介紹。 1、選擇一款合適的編程語言 事實(shí)上,Python、P...

    spacewander 評(píng)論0 收藏0
  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評(píng)論0 收藏0
  • 我的 Python 高效學(xué)習(xí)法

    摘要:我最開始學(xué)習(xí)編程的時(shí)候也是如此,摸索了非常久的時(shí)間,才慢慢找到自己高效學(xué)習(xí)方法。被動(dòng)的學(xué)習(xí)方式聽講閱讀視聽演示,只能讓你做到內(nèi)容留存率的和的知識(shí)。而主動(dòng)的學(xué)習(xí)方式,如通過討論實(shí)踐教授給他人,會(huì)將原來被動(dòng)學(xué)習(xí)的內(nèi)容留存率從提升到和。 showImg(https://segmentfault.com/img/remote/1460000016856679); 閱讀文本大概需要 7 分鐘。 ...

    MyFaith 評(píng)論0 收藏0
  • 爬蟲 - 收藏集 - 掘金

    摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲主要講解了如何使用python編寫一個(gè)可以下載多頁(yè)面的爬蟲,如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...

    1fe1se 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<