关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染網(wǎng)頁時(shí)爬取數(shù)據(jù)的思路
首先可以先去用requests庫訪問url來測(cè)試一下能不能拿到數(shù)據(jù),如果能拿到那么就是一個(gè)普通的網(wǎng)頁,如果出現(xiàn)403類的錯(cuò)誤代碼可以在requests.get()方法里加上headers.
?
如果還是沒有一個(gè)你想要的結(jié)果,打印出來 的只是一個(gè)框架,那么就可以排除這方面了。就只可能是ajax或者是javascript來渲染的。
就可以按照下圖去看一下里面有沒有
?
?
本次先重點(diǎn)去講一下關(guān)于js來渲染網(wǎng)頁的數(shù)據(jù)爬取,這下面的數(shù)據(jù)是隨機(jī)找的,只要是里面想要爬取的數(shù)據(jù)就行 了。
?
?
?
這里ctrl+f就可以搜索到了說明就是在這個(gè)js的文件里面
?
?
?
這個(gè)就是真正的數(shù)據(jù)。
剩下的就是可以利用xpath,beautifulsoup或者pyquery來解析得到的網(wǎng)頁源碼就可以了。
這里我個(gè)人推薦此處用pyquery比較方便簡(jiǎn)單一些。
?
?
另附上源碼給大家:
import json
from pyquery import PyQuery as pq
import requests
requests.get()
# 利用爬蟲來獲取關(guān)于程序員的600個(gè)單詞
def get_web_page():
??? '''
??? 分析網(wǎng)頁,得到結(jié)果是一個(gè)js渲染的網(wǎng)頁,利用requests來把js中的真正的url傳遞
??? 過來,利用字符串的操作來得到一個(gè)真正的json數(shù)據(jù)
??? :return: html源碼
??? '''
??? # 從網(wǎng)上找的一個(gè)url地址
??? url = 'https://query.yahooapis.com/v1/public/yql?q=use%20%22https%3A%2F%2Fraw.githubusercontent.com%2Fyql%2Fyql-tables%2Fmaster%2Fdata%2Fdata.headers.xml%22%20as%20headers%3B%20select%20*%20from%20headers%20where%20url%3D%22https%3A%2F%2Fraw.githubusercontent.com%2FGeorgewgf%2Frecitewords%2Fmaster%2Findex.html%22&format=json&diagnostics=true&callback=HTMLPreview.loadHTML'
??? # 頁面分析得到源碼
??? res = requests.get(url)
??? json_loads = json.loads(res.text.lstrip('/**/HTMLPreview.loadHTML(').rstrip(');'))
??? html = json_loads['query']['results']['resources']['content']
??? # print(html)
??? return html
def parse_web_page(html):
??? '''
??? 根據(jù)傳遞過來的網(wǎng)頁源碼來通過pyquery模塊來得到需要的數(shù)據(jù)
??? :param html: 網(wǎng)頁的源碼
??? :return: 所需要的內(nèi)容,單詞和翻譯
??? '''
??? # 把網(wǎng)頁源碼放到pyquery解析器中
??? doc = pq(html)
??? # 根據(jù)class為wordItemBox的來篩選需要的內(nèi)容塊并得到一個(gè)生成器來為了方便下面數(shù)據(jù)的遍歷
??? contents = doc('.wordItemBox').items()
??? # 把需要的數(shù)據(jù)遍歷并得到真正的內(nèi)容
??? for temp in contents:
??????? word = temp('.word').text()
??????? translate = temp('.translate').text()
??????? # 返回?cái)?shù)據(jù)
??????? return word, translate
def main():
??? '''利用爬蟲來獲取關(guān)于程序員的600個(gè)單詞'''
??? # 得到的網(wǎng)頁源碼
??? html = get_web_page()
??? # 解析網(wǎng)頁得到需要的數(shù)據(jù)
??? content = parse_web_page(html)
??? # 打印需要的數(shù)據(jù)
??? print(content)
if __name__ == '__main__':
??? main()
?
轉(zhuǎn)載于:https://www.cnblogs.com/yunlongaimeng/p/9535386.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的关于js渲染网页时爬取数据的思路和全过程(附源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asyncio协程与并发
- 下一篇: ARC 101 D - Median o