於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()