精华内容
下载资源
问答
  • lxml 下没有etree 或者etree没有HTML

    千次阅读 2019-06-12 18:10:15
    最近看网上py教程的时候都用etree.HTML进行解析HTML 自己引用的时候,报错:etree下面没有HTML 多方查找发现lxml版本更新,代码改变。 以前版本引用: ...以引用etree,和使用etree下面的组件。 ...

    最近看网上py教程的时候都用etree.HTML进行解析HTML

    自己引用的时候,报错:etree下面没有HTML

    多方查找发现lxml版本更新,代码改变。

    以前版本引用:

    from xml import etree

    现在需要:

    import lxml.html
    etree=lxml.html.etree

    以引用etree,和使用etree下面的组件。

     

     

    展开全文
  • etree

    迷上了追番.. . bt种子+xunlei来解决。

    推荐一个网站https://mikanani.me。可以搜索你想要的动漫… 以bt的形式下载,或者复制磁力链。

    1. 抓取你想要的数据

    1. 需要了解requests, etree库,etree用来解析html页面的。
    2. 需要了解html页面结构。能够分析页面,获取数据存放在dom中的规则。etree是以页面标签为一个个的对象的。需要etree的规则来匹配html元素结点。
    3. 爬虫为了解放手工,自动化收集数据。

    2. 爬取bt种子

    爬取斗罗大陆。

    https://mikanani.me/Home/Search?searchstr=%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86

    它应该是个单体项目,没看到有xhr请求。无需转包,发送请求,就响应整个页面。

    分析网页

    不难发现,是个表格,每个tr下的第四个td,为什么不是第三个,etree就是第四个,td下的第一个a标签中的href属性就是想要的数据了。

    https://mikanani.me/Download/20210529/e20a447ed38b85b0e2717336d8980240e600ff46.torrent

    完整代码

    设置请求头。

    import requests as req
    from lxml import etree
    
    import urllib
    import os
    
    resp = req.get('https://mikanani.me/Home/Search?searchstr=%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86')
    
    ## print(resp.text)
    
    html = etree.HTML(resp.text)
    
    print(type(html), html)
    
    # 获取a标签, 放下载链接。
    res = html.xpath('//tr[@class="js-search-results-row"]//td[4]//a')
    
    main_url = 'https://mikanani.me'
    
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'}
    
    local_path = 'E:\python\crawler\mikanani\download'
    def download_video(): 
        i = 0;
        for a_tag in res:
            dict = eval(str(a_tag.attrib))
            download_url = main_url + dict.get('href')
            print(download_url + str(i) + '下载中..')
    
            # urllib.request.urlretrieve(download_url, os.path.join('', str(i) + '.torrent'))
    
            r = req.get(download_url, stream=True, headers = header)
            with open(os.path.join(local_path, str(i) + ".torrent"), "wb") as f:
                for chunk in r.iter_content(chunk_size=1024 * 1024):
                    if chunk:
                        f.write(chunk)
            i = i + 1
    
        print('下载完成.. 抓取个数..', len(res))
    
    
    if __name__ == "__main__":
        download_video()
    

    3. 抓取磁力链

    页面分析
    数据绑定到data-clipboard-text这个属性。取到&前面就行了。

    代码实现

    # data-clipboard-text
    
    import requests as req
    from lxml import etree
    
    import os
    
    resp = req.get('https://mikanani.me/Home/Search?searchstr=%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86')
    
    ## print(resp.text)
    
    html = etree.HTML(resp.text)
    
    print(type(html), html)
    
    res = html.xpath('//tr[@class="js-search-results-row"]//td[1]//a[2]')
    
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'}
    
    def download_video(): 
        i = 0;
        for a_tag in res:
            dict = eval(str(a_tag.attrib))
            magent = dict.get('data-clipboard-text').split('&')[0]
            print(magent + '.. 写入文件...' + str(i))
    
            with open('斗罗大陆.txt', 'a+') as f:
                f.write(magent + '\n')
            i = i + 1
    
        print('下载完成.. 抓取个数..', len(res))
    
    
    
    if __name__ == "__main__":
        download_video()
    
        
    
    展开全文
  • Python etree 问题

    2020-11-25 17:09:22
    from lxml import etree headers = { 此处略过 } url = 'https://www.guazi.com/cs/buy/o1/' resp = requests.get(url,headers=headers) text = print(resp.content.decode('utf-8...
  • etree = html.etree</code> 但是显示的是 <code>Traceback (most recent call last): File "E:\pythonlearn\learn\6大项目快速掌握Python爬虫与反爬虫应用【261796】网络爬虫使用的技术\参考代码\top250...
  • 该项目将包括用于使用Proftpd,Mysql和PHP3 / 4自动化ftp服务器的源代码和配置脚本。 该项目主要集中在etree服务器的配置和管理上。 www.etree.org
  • python etree to dict和 dict to etree 互转 from lxml import etree from collections import defaultdict def etree_to_dict(t): d = {t.tag: {} if t.attrib else None} children = list(t) if children: dd ...

    python etree to dict和 dict to etree 互转

    from lxml import etree
    from collections import defaultdict
    def etree_to_dict(t):
        d = {t.tag: {} if t.attrib else None}
        children = list(t)
        if children:
            dd = defaultdict(list)
            for dc in map(etree_to_dict, children):
                for k, v in dc.items():
                    dd[k].append(v)
            d = {t.tag: {k:v[0] if len(v) == 1 else v for k, v in dd.items()}}
        if t.attrib:
            d[t.tag].update(('@' + k, v) for k, v in t.attrib.items())
        if t.text:
            text = t.text.strip()
            if children or t.attrib:
                if text:
                  d[t.tag]['#text'] = text
            else:
                d[t.tag] = text
        return d
    try:
      basestring
    except NameError:  # python3
      basestring = str
    
    def dict_to_etree(d):
        def _to_etree(d, root):
            if not d:
                pass
            elif isinstance(d, basestring):
                root.text = d
            elif isinstance(d, dict):
                for k,v in d.items():
                    assert isinstance(k, basestring)
                    if k.startswith('#'):
                        assert k == '#text' and isinstance(v, basestring)
                        root.text = v
                    elif k.startswith('@'):
                        assert isinstance(v, basestring)
                        root.set(k[1:], v)
                    elif isinstance(v, list):
                        for e in v:
                            _to_etree(e, ET.SubElement(root, k))
                    else:
                        _to_etree(v, ET.SubElement(root, k))
            else:                                                                                                                                                                             
                raise TypeError('invalid type: ' + str(type(d)))
        assert isinstance(d, dict) and len(d) == 1
        tag, body = next(iter(d.items()))
        node = ET.Element(tag)
        _to_etree(body, node)
        return ET.tostring(node).decode("utf-8")```
    
    
    展开全文
  • lxml中etree.HTML()和etree.tostring()用法

    万次阅读 多人点赞 2018-09-20 20:03:30
    from lxml import etree text = ''' &amp;amp;amp;lt;div&amp;amp;amp;gt; &amp;amp;amp;lt;ul&amp;amp;amp;gt; &amp;amp;amp;lt;li class=&amp;amp;quot;item-0&amp;amp;quot;&...

    etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
    etree.tostring():输出修正后的结果,类型是bytes
    可参考以下代码:

    from lxml import etree
    text = '''
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html">third item</a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a>
         </ul>
     </div>
    '''
    html = etree.HTML(text)
    result = etree.tostring(html)
    print(result.decode('utf-8'))
    

    这里首先导入lxml库的etree模块,然后声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。这里需要注意的是,HTML文本中的最后一个li节点是没有闭合的,但是etree.HTML模块可以自动修正HTML文本。
    这里我们调用tostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转成str类型,结果如下

    <html><body><div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html">third item</a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a>
         </li></ul>
     </div>
    </body></html>
    

    可以看到,经过处理之后,li节点标签被补全,并且还自动添加了body、html节点。

    参考:崔庆才的Python3网络爬虫开发实战

    展开全文
  • Python 标准库之 xml.etree.ElementTree

    万次阅读 2020-04-13 13:57:19
    Python中有多种xml处理API,常用的有xml.dom.*模块、xml.sax.*模块、xml.parser.expat模块和xml.etree.ElementTree模块(以下简称ET)。本文将主要介绍ET的使用,以及它的常用函数。其它模块的简介,请参照文献[1]。...
  • 总结: 1、from lxml import etree 不能使用,版本升级以后,用法改变 使用 from lxml import html etree = html.etree 2、a = etree.HTML(res.text) 不能使用,版本改变,用法改变 > 使用 a = etree.HTML...
  • 我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。1.etree.HTML()etree.HTML()...
  • from lxml import etree

    2017-09-13 11:30:05
    使用python 中 from lxml import etree 时,系统提示未找到文件之类的错误,由于python 自带的并没有集成,安装后即可
  • 我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。 这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。 1.etree.HTML() etree.HTML()...
  • etree.parse直接接受一个文档,按照文档结构解析(本地文件) import xml.etree.ElementTree as ET tree = ET.parse('country_data.xml') root = tree.getroot() etree.html可以解析html文件:(服务器上返回的...
  • etree.tostring

    2020-11-03 10:25:44
    content = html.xpath("//div[contains(@class,'art_content')]") content = etree.tostring(content[0], encoding='utf-8', pretty_print=False, method='html') content = content.decode('utf-8')
  • 服务器和客户端工具,可减轻etree siteops和下载者的压力。 基于命令行python的ftp客户端-非常简单; 只是得到音乐。 服务器工具:完全自动化etree服务器的用户管理。
  • from lxml import etree user_agent ='Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' headers = { 'User-Agent' : user_agent } myUrl='https://soc
  • pip lxml没有etree

    2020-04-27 17:18:24
    python3.7版本安装lxml没有etree from lxml import html import requests url = 'https://www.baidu.com' text=requests.get(url).text print(text) etree = html.etree html = etree.HTML(text) title = html.xpath...
  • ImportError: cannot import name 'etree' from 'lxml' (C:\Users\SUYIZHEN\PycharmProjects\pythonProject\venv\网易云音乐爬虫\lxml\__init__.py) 一直报错,也不知道是哪里出了问题 已经尝试过很多种方法了,...
  • 如题,XPath里面,etree.parse() 和 etree.HTML() 有啥区别?不是很懂,望大神指导。
  • etree.HTML和etree.tostring的关系和用法两者之间的关系etree.HTML和etree.tostrin的使用 两者之间的关系 HTML和etree.tostring是前后衔接的关系 HTML负责把网页源码转化为lxml的文本格式,lxml是一种方便导航查找...
  • lxml etree xpath

    2019-10-02 00:03:16
    from lxml import etree #####################基本用法: ##################### html = ''' <h1 class="header">登录</h1> <form action="/login" method="post"> <label f...
  • etree-xpath

    2017-10-31 01:21:00
    import requestsfrom lxml import etreeurl = 'https://item.taobao.com/item.htm?spm=a219r.lm893.14.118.238e8d532nCpy9&id=537796877521&ns=1&abbucket=1'response = requests.get(url)...
  • lxml 无法导入 etree

    2021-01-20 10:17:06
    使用pycharm 下载 lxml 一直无法调入 etree模块 解决办法: 卸载pycharm 安装的lxml 使用命令行 重新安装lxml
  • 解决lxml包没有etree的问题,解决lxml包没有etree的问题,解决lxml包没有etree的问题
  • lxml.etree的使用

    2021-05-25 18:09:56
    lxml.entree的使用文档中文文档英文文档常用的一个对象三个方法Element对象etree.fromstring()(将字符串转化为Element对象)etree.XML(str)(将XML转化为Element对象)etree.tostring()(将Element转化为string)etree...
  • python etree 操作xml

    2019-09-13 12:20:28
    python etree 操作xml from xml.etree import ElementTree as ET class CreateXML(object): """ 创建xml文件 """ def createxml(self,): """ 创建...
  • Python xml.etree.ElementTree解析XML文件

    万次阅读 多人点赞 2018-01-26 21:26:52
    xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。xml.etree.ElementTree模块对于恶意构造的数据是不安全的。如果您需要解析不受信任或未经验证的数据,请参阅XML漏洞。 参考文献:...
  • 使用etree爬取视频

    2019-02-20 14:51:17
    爬虫常用的几个库中,各有所长,不过目的都是一样的,今天写了个用etree函数的爬虫来爬取视频素材,分享一下 #https://ibaotu.com/shipin/ import requests from lxml import html etree=html.etree class ...
  • etree的应用

    2018-03-15 17:45:35
    import urllib.request ...from lxml import etree url = "http://www.qiushibaike.com/8hr/page/2/" headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,914
精华内容 3,565
关键字:

etree