最帅爬虫_lxml 模块

一、lxml简介

lxml 是一个HTML/XML 的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

我们可以利用之前学习的 XPath 语法,来快速的定位特定元素以及节点信息。

安装方法:pip install lxml

二、lxml初步使用

1. 解析 HTML 字符串

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页面内容变成element
tree = etree.HTML(text)

# print(tree)#<Element html at 0x3bfb408>
# element对象可以使用xpath()方法进行xpath选取元素,xpath方法的返回值:list
# 其实使用lxml模块解析html,他所有页面元素都会变成element对象

# 查找所有的li标签
resuslt = tree.xpath('//li')
# print(resuslt)

# 查找所有的li标签a标签的内容
a_texts = tree.xpath('//li/a/text()')
print(a_texts,"**")

# 如何将element元素变成字符串
str = etree.tostring(tree,pretty_print=True).decode('utf-8')
print(str)

2. lxml 文件读取

除了直接读取字符串,lxml 还支持从文件里读取内容。

我们新建一个 demo.html 文件。
在这里插入图片描述
再利用 etree.parse() 方法来读取文件。

'''
解析xml
'''
#etree使用的dom解析
from lxml import etree

tree = etree.parse('demo.xml')
# print(tree)
print(tree.xpath('//li'))

注意:从文件中读取数据,要求文件内容符合 xml 格式,如果标签缺失,则不能正常读取。

三、扇贝单词案例

爬取python常用单词:扇贝单词网:
https://www.shanbay.com/wordlist/110521/232414/
点击进入该首页,
在这里插入图片描述

翻页的时候查询参数规律
在这里插入图片描述
也可以通过F12,点击网络,点doc解析
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后我们只需要通过pycharm工具编写xpath语法去过滤筛选节点,爬取数据

import requests,random
from lxml import etree

"""代理设置"""
base_url = 'http://www.taobao.com'
# 构建代理ip列表,里面一般包含http与HTTPS两种协议的代理ip,为了适应不同的网站,
# 该模块会根据所要访问的网站的协议类型自动的选择合适的ip
procxy = [
    {'https':'HTTPS://125.126.123.42:60004'},
    {'https':'HTTPS://122.224.65.201:3128'},
]
# 随机选择列表中的字典,直到匹配上可以使用的ip
http = random.choice(procxy)


def get_content(url):
    '''
    请求获取数据
    :param url:
    :return:
    '''
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
    }
    response = requests.get(url,headers=headers,proxies=http,timeout=20)
    return response.text



def parse_page(html_str):
    '''
    使用xpath提取页面数据
    :param html_str: 页面字符串html内容
    :return:
    '''
    #1、将html_str--->element对象
    tree = etree.HTML(html_str)

    tr_list = tree.xpath('//tr[@class="row"]')
    for tr in tr_list:
        #tr:包含每个单词的英文和中文
        # print(tr)
        word_en = tr.xpath('.//td[@class="span2"]/strong/text()')[0]
        word_zh = tr.xpath('.//td[@class="span10"]/text()')[0]
        item = {}
        item['word_en'] = word_en
        item['word_zh'] = word_zh
        print(item)

        # print(1,word_en)
        # print(2,tree.xpath('//td[@class="span2"]/strong/text()'))


def main():
    #url
    base_url = 'https://www.shanbay.com/wordlist/110521/232414/?page=%s'
    #分页
    #经验:开发的时候测试的评率和次数都要控制,减少请求次数。
    for i in range(1,4):
        #发送请求获取数据
        html_str = get_content(base_url % i)
        # print(html_str)
        #解析---xpath
        parse_page(html_str)


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值