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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于js渲染网页时爬取数据的思路和全过程(附源码)

發(fā)布時(shí)間:2024/1/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于js渲染网页时爬取数据的思路和全过程(附源码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

于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)容,希望文章能夠幫你解決所遇到的問題。

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