文档章节

requests_html和pyquery的结合使用

鹏灬
 鹏灬
发布于 2018/10/25 15:39
字数 356
阅读 12
收藏 0
from pyquery import PyQuery
from requests_html import HTMLSession
import json
import logging
from concurrent.futures import ProcessPoolExecutor

logging.basicConfig(filename="", level=logging.INFO)

header = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control": "max-age=0",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"
    }

class Navigation_test(object):

    def __init__(self):
        self.mylist_all = []
        self.mylist_js = []

    def get_html(self,url,headers = header):

        with HTMLSession() as session:
            res = session.get(url=url,headers = headers,timeout = 15)
        # if url in self.mylist_js:
        # res.html.render()
        html = res.html.html
        return html

    def get_url_navtemplate(self):
        #得到所有的json
        not_js_render_list = "specify_nav"
        # for i in not_js_render_list:
        with open("/home/ppwang/PycharmProjects/gitproject/analysis/data/{}.json".format(not_js_render_list), "r") as f:
            text = f.read()
        mydata = json.loads(text)

        for i in mydata:
            my_new_data = list(zip(i["info:url"],i["info:nav_template"]))
            for kk in my_new_data:
                self.mylist_all.append([kk[0][-1], kk[1],i["info:web_site"],kk[0][:-1]])
        return self.mylist_all

    def get_js_url_navtemplate(self):
        #得到js加载的网址
        js_render_list = ["info_mylist_js","jsg_js_json"]
        for i in js_render_list:
            with open("/home/ppwang/PycharmProjects/gitproject/analysis/data/{}.json".format(i), "r") as f:
                text = f.read()
            mydata = json.loads(text)

            for i in mydata:
                my_new_data = list(zip(i["info:url"],i["info:nav_template"]))
                for kk in my_new_data:
                    self.mylist_js.append(kk[0][-1])
        return self.mylist_js

    def add_js_render_func(self):
        self.mylist_js.append("")
        return self.mylist_js

    def judge_dom_content(self,html,nav_tem):
        dom = PyQuery(html)
        p = dom(nav_tem)("a").length
        return p


    def get_start(self,b):
        html = self.get_html(b[0])
        the_num = self.judge_dom_content(html=html,nav_tem=b[1])
        logging.info("{},--{}--,a标签的个数为{}".format(b[2], b[3], the_num))
        if the_num == 0:
            with open("/home/ppwang/PycharmProjects/false12512_nav.txt","a+") as file:
                file.write("{},--{}--,a标签的个数为{}".format(b[2],b[3],the_num)+"\r\n")


if __name__ == '__main__':
    n = Navigation_test()
    n.get_js_url_navtemplate()
    n.add_js_render_func()
    mylist = n.get_url_navtemplate()

    ex = ProcessPoolExecutor(10)
    for i in mylist:
        ex.submit(n.get_start,i)
    ex.shutdown(wait=True)

© 著作权归作者所有

共有 人打赏支持
鹏灬
粉丝 2
博文 35
码字总数 8250
作品 0
海淀
私信 提问
Python学习,还在用正则或者bs4做爬虫吗?来试试css选择器吧

之前写的一些爬虫都是用的正则、bs4、xpath做为解析库来实现,如果你对web有所涉及,并且比较喜欢css选择器,那么就有一个更适合的解析库—— PyQuery。我们就用一个非常简单的小例子来看看c...

python玩家
2018/06/27
0
0
PyQuery 如和通过 html标签的name 获得标签?

例如 我只知道 PyQuery(html_text)('.A') 根据 class获得标签 PyQuery(html_text)('#B') 根据 id获得标签 PyQuery(html_text)('a') 根据标签名获得标签 通过name可以获得标签么?......

tfc
2012/04/11
1K
1
网络爬虫06: PyQuery库详解

PyQuery 1.什么是PyQuery库 强大又灵活的网页解析库。如果你觉得正则写起来太麻烦,如果你觉得BeautifulSoup语法太难记,如果你熟悉jQuery的语法,那么PyQuery就是你的绝佳选择 2.安装 初始化...

代码打碟手
2018/09/07
0
0
Python 开发者应该知道的 7 个开发库

本文由 OSChina 译自 7 Python Libraries you should know about 在我多年的 Python 编程经历以及在 Github 上的探索漫游过程中,我发掘到一些很不错的 Python 开发包,这些包大大简化了开发...

红薯
2012/11/12
23.1K
42
PyQuery —— jQuery 风格的 HTML/XML 解析库

PyQuery 让你使用 jQuery 的风格来遍历 XML 文档,它使用了 lxml 来处理 XML 乃至 HTML 文档。

达尔文
2017/03/24
23
0

没有更多内容

加载失败,请刷新页面

加载更多

外教比较

确定收费的模式 确定授课的模式 确定教学的方式-用什么样的方式能让人更快更好的学会 确定核心竞争力-比如我们的师资是牛津大学的 英语流利说 收费的模式-报特色课程,比如训练营之类的,其实...

V字仇杀
14分钟前
1
0
上下文无关文法介绍

上下文无关文法 上下文无关文法是用来描述程序语言的一种表达方式,通过简单的符号描述语言的集合。正如我们所知道,一个程序即为一个句子(字符串),语言就是所有句子的集合。上下文无关文...

陶小陶
24分钟前
3
0
eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
今天
1
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
今天
4
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部