爬虫6 使用xpath语法,解析HTML

简述:BeautifulSoup 外, python常用的解析HTML、XML的第三方库:lxml, lxml中语法为xpath

 实例1: 提取‘某点’ 月票榜中部分作品的作者(列表)

  1. 使用lxml中的etree提取响应数据中的HTML标签树。

  2. 使用xpath语法来解析标签树。

"""lxml使用xpath语法,来解析HTML"""

from lxml import etree
import requests
from fake_useragent import UserAgent


url = "https://www.qidian.com/rank/yuepiao?page=1"

headers = {
    'User-Agent': UserAgent().random
}

r = requests.get(url, headers=headers)
print('---返回值: ', r.status_code, '---响应编码: ', r.encoding)
print('返回数据: ', r.text)

# 定义etree的HTML对象
e = etree.HTML(r.text)
# 使用.xpath语法,编写逻辑
# '//h4/a/text()': 某h4标签下的a标签中的内容
# '//p[@class="author"]/a[1]/text()': 某p标签,class属性为“author”,下面的第一个a标签,下的内容
book_names = e.xpath('//h4/a/text()')
authors = e.xpath('//p[@class="author"]/a[1]/text()')

print(book_names)
print(authors)

 

 实例2:提取 '某点' 某部作品的某一章免费章节

  

"""实例: 使用xpath、BeautifulSoup解析出起点某作品单章内容"""
from lxml import etree
import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup


url = "https://read.qidian.com/chapter/5d93gIHh31fOVUeyz9PqUQ2/C0mW-1dVpbdOBDFlr9quQA2"
headers = {
    'User-Agent': UserAgent().random
}

r = requests.get(url, headers=headers)
content = r.text
print('---返回值: ', r.status_code, '---响应编码: ', r.encoding)
# print('返回数据: ', r.text)


# 1. 使用xpath 解析出章节内容
e = etree.HTML(r.text)
content = e.xpath('//div[@class="read-content j_readContent"]/p/text()')
print(content)


# 2. 使用BeautifulSoup 解析出章节内容
# soup = BeautifulSoup(r.text, 'html.parser')
# 按照字典的形式给attrs参数赋值
# print(soup.find_all(name='div', attrs={"class": "read-content j_readContent"}))

 

posted @ 2020-04-30 16:48  黑无常  阅读(349)  评论(0)    收藏  举报