zoukankan      html  css  js  c++  java
  • 关于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()

  • 相关阅读:
    Android Logcat使用技巧
    SqlClient使用存储过程并获取输出参数的指
    内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed
    android 读写sd卡的权限设置
    Android中EditText的使用方法持續更新
    RSL编译方式的FLEX站点出现#2046错误
    从网络读取数据并动态的显示在ListView中
    LEFT JOIN INNER JOIN 效率比较
    使用Installshield2009 在IIS6部署Asp.net mvc 应用程序
    Installshield2009中使用osql.exe执行数据库脚本
  • 原文地址:https://www.cnblogs.com/yunlongaimeng/p/9535386.html
Copyright © 2011-2022 走看看