日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python爬虫爬取动态页面思路+实例(一)

發(fā)布時間:2024/1/4 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫爬取动态页面思路+实例(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

有時候,我們天真無邪的使用urllib庫或Scrapy下載HTML網(wǎng)頁時會發(fā)現(xiàn),我們要提取的網(wǎng)頁元素并不在我們下載到的HTML之中,盡管它們在瀏覽器里看起來唾手可得。

這說明我們想要的元素是在我們的某些操作下通過js事件動態(tài)生成的。舉個例子,我們在刷QQ空間或者微博評論的時候,一直往下刷,網(wǎng)頁越來越長,內(nèi)容越來越多,就是這個讓人又愛又恨的動態(tài)加載。

爬取動態(tài)頁面目前來說有兩種方法

分析頁面請求(這篇介紹這個)
selenium模擬瀏覽器行為(霸王硬上弓,以后再說)

言歸正傳,下面介紹一下通過分析頁面請求的方法爬取動態(tài)加載頁面的思路。中心思想就是找到那個發(fā)請求的javascript文件所發(fā)的請求。

舉兩個例子,京東評論和上證股票。

后注:本文的兩個例子都是get請求,可以顯示的在瀏覽器中查看效果,如果是post請求,需要我們在程序中構(gòu)造數(shù)據(jù),構(gòu)造方法可以參考我從前的一篇博文Scrapy定向爬蟲教程(六)——分析表單并回帖。

京東評論

這是一個比較簡單的例子。

首先我們隨便找一個熱賣的商品,評論比較多。

就這個吧威剛(ADATA) SU800 256G 3D NAND SATA3固態(tài)硬盤。

點進去看看這個頁面現(xiàn)在的狀況

滾動條給的第一印象感覺這頁仿佛沒多少內(nèi)容。

鍵盤F12打開開發(fā)者工具,選擇Network選項卡,選擇JS(3月12日補:除JS選項卡還有可能在XHR選項卡中,當(dāng)然也可以通過其它抓包工具),如下圖

然后,我們來拖動右側(cè)的滾動條,這時就會發(fā)現(xiàn),開發(fā)者工具里出現(xiàn)了新的js請求(還挺多的),不過草草翻譯一下,很容易就能看出來哪個是取評論的,如下圖

好,復(fù)制出js請求的目標(biāo)url

在瀏覽器中打開,發(fā)現(xiàn)我們想要的數(shù)據(jù)就在這里,如下圖

這整個頁面是一個json格式的數(shù)據(jù),對于京東來說,當(dāng)用戶下拉頁面時,觸發(fā)一個js事件,向服務(wù)器發(fā)送上面的請求取數(shù)據(jù),然后通過一定的js邏輯把取到的這些json數(shù)據(jù)填充到HTML頁面當(dāng)中。對于我們Spider來說,我們要做的就是把這些json數(shù)據(jù)整理提取。

在實際應(yīng)用中,當(dāng)然我們不可能去每個頁面里找出來這個js發(fā)起的請求目標(biāo)地址,所以我們需要分析這個請求地址的規(guī)律,一般情況下規(guī)律是比較好找的,因為規(guī)律太復(fù)雜服務(wù)方維護也難。那我們就來看一下京東這個請求:

https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv337&productId=3311073&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0

1

挺長的一個GET請求,不過參數(shù)命名都很規(guī)范,產(chǎn)品ID,評論頁碼什么的,因為我這里只是舉個例子,我就不一個一個去研究了~

思路有了,就按照正常的爬蟲去寫就好了,發(fā)請求,得到響應(yīng),解析數(shù)據(jù),后續(xù)處理等等……

上證股票

這是前段時間一位道友問我的一個問題,感覺還是挺有嚼頭的,比上例要難。

目標(biāo)網(wǎng)址:上海證券交易所

目的是把每一頁的股票信息都得到,看似很簡單,但是通過查看源代碼發(fā)現(xiàn),每一頁的鏈接在源代碼里是看不到的。如下圖

ok,又是js動態(tài)加載,在源代碼里不顯示,不過一定躲不過我們的開發(fā)者工具,按照上面京東的思路,切到Network、js選項卡,點擊頁碼,獲得請求地址,一切行云流水,如下圖

然而,當(dāng)我們復(fù)制出這個url,在瀏覽器中打開的時候,瀏覽器呈現(xiàn)的信息卻是:

403錯誤!奇哉怪也!

究其原因,403狀態(tài)碼什么意思呢?意思就是說,本服務(wù)器知道你發(fā)來這一串url想找啥呢,但是老子就不給你!

怎么辦,有辦法~

想想看,為什么我們在那個頁面上點擊第二頁第三頁的時候能夠正常的獲取到數(shù)據(jù)?為什么我們直接請求不行?都是同一個瀏覽器呀。

問題就在于,瀏覽器通過上一個頁面發(fā)起的請求和單獨發(fā)的請求,頭信息(request header)是不同的,比方說cookie、refer這些字段,服務(wù)器就通過這些就把我們的請求過濾掉了。

瀏覽器如此,我們的爬蟲也是如此,最后我解決這個問題的方法是給爬蟲設(shè)定詳細(xì)的請求頭(從我們能請求到的原始頁獲得),包括cookie,refer等,終于成功的得到了返回的json數(shù)據(jù)。

這份代碼是用python3的urllib寫的,我只幫他寫了取一頁的數(shù)據(jù),邏輯他自己去寫了。如下,看官不妨試試將頭信息去掉~

import urllib.request

Cookie = "PHPStat_First_Time_10000011=1480428327337; PHPStat_Cookie_Global_User_Id=_ck16112922052713449617789740328; PHPStat_Return_Time_10000011=1480428327337; PHPStat_Main_Website_10000011=_ck16112922052713449617789740328%7C10000011%7C%7C%7C; VISITED_COMPANY_CODE=%5B%22600064%22%5D; VISITED_STOCK_CODE=%5B%22600064%22%5D; seecookie=%5B600064%5D%3A%u5357%u4EAC%u9AD8%u79D1; _trs_uv=ke6m_532_iw3ksw7h; VISITED_MENU=%5B%228451%22%2C%229055%22%2C%229062%22%2C%229729%22%2C%228528%22%5D"

url = "http://query.sse.com.cn/security/stock/getStockListData2.do?&jsonCallBack=jsonpCallback41883&isPagination=true&stockCode=&csrcCode=&areaName=&stockType=1&pageHelp.cacheSize=1&pageHelp.beginPage=3&pageHelp.pageSize=25&pageHelp.pageNo=3&pageHelp.endPage=31&_=1480431103024"

headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
    'Cookie': Cookie,
    'Connection': 'keep-alive',
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, sdch',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Host': 'query.sse.com.cn',
    'Referer': 'http://www.sse.com.cn/assortment/stock/list/share/'
}

req = urllib.request.Request(url,None,headers)
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8"))

結(jié)語

還是那句話,通過分析頁面請求的方法爬取動態(tài)加載頁面的思路。中心思想就是找到那個發(fā)請求的javascript文件所發(fā)的請求。然后利用我們既有的爬蟲知識去構(gòu)造請求就可以了。

臨近考試,寫作較為匆忙。如果本文有敘述不清或者不正確的地方,還請批評指正。

總結(jié)

以上是生活随笔為你收集整理的Python爬虫爬取动态页面思路+实例(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲黄色中文字幕 | 麻豆视频官网 | 日本少妇xxxx软件 | 淫五月天 | 加勒比视频在线观看 | 日韩成人av免费在线观看 | 精品无码黑人又粗又大又长 | 天天天天色| 中文字幕免费一区 | 国产精品一卡 | 日韩亚洲欧美中文字幕 | av在线播放中文字幕 | 国产精品伦一区 | 天天人人 | 无码国产精品一区二区色情男同 | 免费黄色国产 | 亚洲第一成网站 | 国产精品视频大全 | 久久泄欲网 | 国产一区二区三区91 | 成人自拍视频 | 国产精品色悠悠 | 狠色综合 | 91在线在线 | 国产亚洲精品久久777777 | 99re这里有精品 | 欧美乱论视频 | 欧美色图五月天 | 无码人妻精品一区二区中文 | 日本无翼乌邪恶大全彩h | 国产91精品高潮白浆喷水 | 一本av在线| 熟妇人妻久久中文字幕 | 国产高清亚洲 | 亚洲天堂一区二区 | 91久久网| 黑人超碰 | 激情视频网站在线观看 | 日日碰| 桃谷绘里香番号 | 国产无 | 久久久久久国产精品视频 | 天堂中文视频 | 动漫精品一区一码二码三码四码 | 成熟的女同志hd | 1000部多毛熟女毛茸茸 | 青娱乐在线播放 | 自拍偷拍福利视频 | 真人bbbbbbbbb毛片 | 国产午夜精品福利视频 | 国产真实交换夫妇视频 | 日b视频在线观看 | 日本成人午夜视频 | 亚洲一区二区三区影院 | 都市激情 自拍偷拍 | 日本精品人妻无码免费大全 | 成人免费av网站 | 在线播放少妇奶水过盛 | 日日夜夜操操 | 天堂a在线 | 9色在线 | 亚洲97在线| 欧美色图17p | 黄色一级片视频 | 黄色片亚洲 | 美女视频91| 成人免费观看a | 欧洲av在线播放 | 一区二区成人网 | 女同性恋一区二区三区 | 日本人妖网站 | 91国产在线免费观看 | 欧美bbbbbbbbbbbb1 麻豆精品av | 亚洲精品一区二区三区在线 | 精品国产乱码久久久久久鸭王1 | 成年人免费看毛片 | 在线激情小视频 | 天天射综合网站 | 日韩av一区二区三区四区 | av网站大全免费 | 中文视频在线 | 亚洲毛片网 | 91黄在线观看 | 国产精品日本 | 亚洲综合干| 亚洲激情自拍偷拍 | 在线看的免费网站 | 在线无| 午夜淫片 | 天堂网中文在线 | 91免费精品 | 西西人体做爰大胆gogo直播 | 五十路六十路七十路熟婆 | 伊人激情综合 | 婷婷狠狠 | 麻豆婷婷| 久久牛牛| 日本精品一二三区 | 国产福利在线免费观看 |