python爬虫之lxml库的基本使用(附实战训练以及应用)
python爬虫之lxml库的基本使用(附实战训练以及应用)
·
源码请点赞收藏关注后私信博主要
通过urllib库可以模拟请求 得到网页的内容 但是在大多数情况下我们并不需要整个网页 而知需要网页中某部分的请求 可以利用解析库lxml迅速 灵活的处理HTML或XML 提取需要的信息 另外 该库支持XPath的解析方式 效率也非常高
1:安装lxml库
pip install lxml
也可以参考我这篇博客
2:XPath语法速成
Xpath XML路径语言 用于在XML文档中查找信息 它既适用于XML文档的搜索 也适用于HTML 其核心是按照规则 通过编写路径选择表达式来筛选节点
2.1:绝对路径和相对路径
绝对路径:用/表示从根节点开始选择
相对路径:用//表示选择任意位置的节点 而不考虑他们的位置
另外可以使用*通配符来表示未知的元素
2.2:选择分支定位
存在多个元素想唯一定位可以用[]来选择分支
下面通过实战来巩固lxml库的用法



部分代码如下
import urllib
import urllib.request
import urllib.parse
from lxml import etree
from urllib import error
import lxml.html
import os
import time
novel_base_url='http://www.qbiqu.com'
novel_url= urllib.parse.urljoin(novel_base_url,'/50_50096')
chapter_url_list=[]
headers={
'Host':'www.qbiqu.com',
'Referer':'http://www.qbiqu.com/',
'User-Agent':'Mozilla/5.0(Macintosh;intel Mac OS X 10_13_6)AppleWebKit/537.36(KHTML,like Gecko)Chrome/67.0.3396.99 Safari/537.36'
}
novel_save_dir=os.path.join(os.getcwd(),'novel_cache/')
def parsing_chapter(url):
req=urllib.request.Request(url=url,headers=headers)
html= lxml.html.parse(urllib.request.urlopen(req))
title=html.xpath('//h1/text()')[0]
contents=html.xpath('//*[@id="content"]/text()')
content=""
for i in contents:
content+=i.strip()
save_novel(title,content)
def save_novel(name,content):
try:
with open(novel_save_dir+name+'.txt',"w+") as f:
f.write(content.strip())
except(error.HTTPError,OSError)as reason:
print(str(reason))
else:
print("下载完成"+name)
chapter_url_list.append(urllib.parse.urljoin(novel_base_url,href))
print(chapter_url_list)
if __name__ == "__main__":
if not os.path.exists(novel_save_dir):
os.mkdir(novel_save_dir)
fetch_chapter_urls()
for chapter in chapter_url_list:
time.sleep(1)
parsing_chapter(chapter)
源码请点赞收藏关注后私信博主要
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)