xml和dom书在爬虫中的用法

news/2024/7/19 10:26:55 标签: 爬虫, python

为什么80%的码农都做不了架构师?>>>   hot3.png

python">'''
用lxml取文本内容
string(.):"取所有文本"
split():"不给参数,默认按空格切割"
join():"将列表转为字符串"
'''
from requests_html import HTMLSession
import requests
from simple_spider_rule.get_charset import pick_charset
from lxml import etree

headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/"
                      "537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
    }


class RequLxml(object):

    def __init__(self,url):
        self.url = url

    def re_render(self):
        try:
            with HTMLSession() as sess:
                res = sess.get(url=self.url, headers = headers)
            return res.html
        except Exception as e:
            print("请求出错,一个错误的网站",e)

    def res_quest(self):
        try:
            res= requests.get(url=self.url, headers=headers)
            return res
        except Exception as e:
            print(e)

    def get_return_data(self):
        res = self.res_quest()
        charset = pick_charset(res.text)
        res.encoding = charset
        response = res.text
        return response

    def lxml_data(self):
        data = self.get_return_data()
        selector_cdata = etree.HTML(data)
        title = selector_cdata.xpath("//h1[@id='chan_newsTitle']")[0].text
        content = selector_cdata.xpath("//div[@id='chan_newsDetail']")[0]
        content = content.xpath("string(.)").split()
        ctime = selector_cdata.xpath("//div[@id='chan_newsInfo']")[0]
        ctime = ctime.xpath("string(.)").split()[5:7]
        print("title:",title)
        print("ctime:", " ".join(ctime))
        print("content:", " ".join(content))

    def main(self):
        self.lxml_data()


if __name__ == '__main__':
    url = "https://news.china.com/socialgd/10000169/20190124/35071107.html"
    r = RequLxml(url=url)
    r.main()


python">import re


def pick_charset(html):
    """
    从任意网页返回数据中的文本中提取 meta charset
    :param html:
    :return:
    """
    charset = None
    m = re.compile('<meta .*(http-equiv="?Content-Type"?.*)?charset="?([a-zA-Z0-9_-]+)"?', re.I).search(html)
    if m and m.lastindex == 2:
        charset = m.group(2).lower()
    return charset



python">'''
用dom树取文本内容
'''

from requests_html import HTMLSession
import requests
from simple_spider_rule.get_charset import pick_charset
from pyquery import PyQuery as pq

headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/"
                      "537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
    }


class RequLxml(object):

    def __init__(self,url):
        self.url = url

    def re_render(self):
        try:
            with HTMLSession() as sess:
                res = sess.get(url=self.url, headers = headers)
            return res.html
        except Exception as e:
            print(e)

    def res_quest(self):
        try:
            res= requests.get(url=self.url, headers=headers)
            return res
        except Exception as e:
            print(e)

    def get_return_data(self):
        res = self.res_quest()
        charset = pick_charset(res.text)
        res.encoding = charset
        response = res.text
        return response

    def handle_space(self,parameter):
        adata = " ".join(parameter.split())
        return adata

    def get_data(self):
        res = self.get_return_data()
        dom = pq(res)
        title = dom("#chan_newsTitle").text()
        ctime = dom("#chan_newsInfo").text()
        content = dom("#chan_newsDetail").text()
        print("title:",self.handle_space(title))
        print("ctime:",self.handle_space(ctime))
        print("content:",self.handle_space(content))

    def run(self):
        self.get_data()

if __name__ == '__main__':
    url = "https://news.china.com/socialgd/10000169/20190124/35071107.html"
    r = RequLxml(url=url)
    r.run()

python">'''
yeild
注:python3和python2 的生成器用法不同了,python3用的是__next__(),python2用的是next()
'''

import queue

class Yeild_Queue(object):

    def __init__(self,clist:list):
        self.q = queue.Queue()
        self.clist = clist

    def save_data(self):
        for data in self.clist:
            self.q.put(data)
        return self.q

    def get_data(self):
        self.save_data()
        while not self.q.empty():
            cdata = self.q.get()
            yield cdata

    def run(self):
        a = self.get_data()
        for b in range(len(self.clist)):
            print(a.__next__())
        # print(dir(a))

if __name__ == '__main__':
    alist = [3,6,1,9,4,2]
    yq = Yeild_Queue(alist)
    yq.run()

转载于:https://my.oschina.net/mypeng/blog/3006056


http://www.niftyadmin.cn/n/987313.html

相关文章

.Net深入学习序列化和反序列化

序列化&#xff1a;.net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中&#xff0c;先将对象的公共字段和私有字段以及类的名称&#xff08;包括类所在的程序集&#xff09;转换为字节流&#xff0c;然后再把字节流写入…

java源代码分析----jvm.dll装载过程

简述众所周知java.exe是java class文件的执行程序&#xff0c;但实际上java.exe程序只是一个执行的外壳&#xff0c;它会装载jvm.dll&#xff08;windows下&#xff0c;以下皆以windows平台为例&#xff0c;linux下和solaris下其实类似&#xff0c;为&#xff1a;libjvm.so&…

demo04 webpack + babel7

1.关于 babel 7 版本 babel 7 于 2018 年 8 月份发布&#xff0c;在 babel 7 中&#xff0c;所有官方包更名为以 babel 为开头,并且 babel 7 推荐使用 babel.config.js 来配置 babel 。 关于 babel 7 的重大改变&#xff0c;请参考这篇文章&#xff1a;Babel 7 发布 对 babel 7…

Sqlserver导出带数据的脚本文件

最近设计了一个数据库&#xff0c;需要导出为sql脚本&#xff0c;里面有一些默认的测试数据&#xff0c;如果是mysql数据库的话&#xff0c;默认导出的数据库脚本除了基本的建表语句外&#xff0c;还有insert into语句&#xff0c;但是现在用的是sql server数据库&#xff0c;由…

第一個 CUDA 程式

第一個 CUDA 程式 发表时间&#xff1a;2009-01-09CUDA 目前有兩種不同的 API&#xff1a;Runtime API 和 Driver API&#xff0c;兩種 API 各有其適用的範圍。由於 runtime API 較容易使用&#xff0c;一開始我們會以 runetime API 為主。 CUDA 目前有兩種不同的 API&#xf…

如何通过StackStorm自动支持2万多台服务器

在过去的三年中&#xff0c;我们的网络为成千上万次直播体育赛事、海量软件下载、数十亿小时流媒体视频内容以及数千个需要实时响应的Web应用程序提供支持。为了支持这种大规模的增长&#xff0c;从2015年开始&#xff0c;我们的全球网络已经增加到71 Tbps&#xff0c;我们在13…

Dom优化

1、innerHTML //方案一 for (var i0;i<5000;i) {oUl.innerHTML <li></li>; } //方案二 var str ; for (var i0;i<5000;i) {str <li></li>; }oUl.innerHTML str;//显然方案二比方案一更好&#xff0c;JS与DOM交互只需要一次&#xff0c;性能更…

打响网管师高薪就业的第一枪

你是否仍在为找工作而犯愁&#xff1f;你是否为不能找到真正的实战培训而苦恼&#xff1f;你是否想到北京工作&#xff1f;你是否想到像联想、同方这样的大型IT企业工作&#xff1f;你是否想成为见证网管师高薪就业的第一人&#xff1f;你是否想成为第一个高薪就业的金牌网管师…