关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染網頁時爬取數據的思路
首先可以先去用requests庫訪問url來測試一下能不能拿到數據,如果能拿到那么就是一個普通的網頁,如果出現403類的錯誤代碼可以在requests.get()方法里加上headers.
?
如果還是沒有一個你想要的結果,打印出來 的只是一個框架,那么就可以排除這方面了。就只可能是ajax或者是javascript來渲染的。
就可以按照下圖去看一下里面有沒有
?
?
本次先重點去講一下關于js來渲染網頁的數據爬取,這下面的數據是隨機找的,只要是里面想要爬取的數據就行 了。
?
?
?
這里ctrl+f就可以搜索到了說明就是在這個js的文件里面
?
?
?
這個就是真正的數據。
剩下的就是可以利用xpath,beautifulsoup或者pyquery來解析得到的網頁源碼就可以了。
這里我個人推薦此處用pyquery比較方便簡單一些。
?
?
另附上源碼給大家:
import json
from pyquery import PyQuery as pq
import requests
requests.get()
# 利用爬蟲來獲取關于程序員的600個單詞
def get_web_page():
??? '''
??? 分析網頁,得到結果是一個js渲染的網頁,利用requests來把js中的真正的url傳遞
??? 過來,利用字符串的操作來得到一個真正的json數據
??? :return: html源碼
??? '''
??? # 從網上找的一個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):
??? '''
??? 根據傳遞過來的網頁源碼來通過pyquery模塊來得到需要的數據
??? :param html: 網頁的源碼
??? :return: 所需要的內容,單詞和翻譯
??? '''
??? # 把網頁源碼放到pyquery解析器中
??? doc = pq(html)
??? # 根據class為wordItemBox的來篩選需要的內容塊并得到一個生成器來為了方便下面數據的遍歷
??? contents = doc('.wordItemBox').items()
??? # 把需要的數據遍歷并得到真正的內容
??? for temp in contents:
??????? word = temp('.word').text()
??????? translate = temp('.translate').text()
??????? # 返回數據
??????? return word, translate
def main():
??? '''利用爬蟲來獲取關于程序員的600個單詞'''
??? # 得到的網頁源碼
??? html = get_web_page()
??? # 解析網頁得到需要的數據
??? content = parse_web_page(html)
??? # 打印需要的數據
??? print(content)
if __name__ == '__main__':
??? main()
?
轉載于:https://www.cnblogs.com/yunlongaimeng/p/9535386.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的关于js渲染网页时爬取数据的思路和全过程(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asyncio协程与并发
- 下一篇: ARC 101 D - Median o