关于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值