python爬虫之lxml库的基本使用(附实战训练以及应用)

源码请点赞收藏关注后私信博主要

通过urllib库可以模拟请求 得到网页的内容 但是在大多数情况下我们并不需要整个网页 而知需要网页中某部分的请求 可以利用解析库lxml迅速 灵活的处理HTML或XML 提取需要的信息 另外 该库支持XPath的解析方式 效率也非常高 

1:安装lxml库

pip install lxml

也可以参考我这篇博客

倒入库

2:XPath语法速成

Xpath XML路径语言 用于在XML文档中查找信息 它既适用于XML文档的搜索 也适用于HTML 其核心是按照规则 通过编写路径选择表达式来筛选节点

2.1:绝对路径和相对路径

绝对路径:用/表示从根节点开始选择

相对路径:用//表示选择任意位置的节点 而不考虑他们的位置

另外可以使用*通配符来表示未知的元素

2.2:选择分支定位

存在多个元素想唯一定位可以用[]来选择分支

下面通过实战来巩固lxml库的用法

python爬虫之lxml库的基本使用(附实战训练以及应用)_第1张图片

python爬虫之lxml库的基本使用(附实战训练以及应用)_第2张图片

python爬虫之lxml库的基本使用(附实战训练以及应用)_第3张图片

 部分代码如下 

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)

源码请点赞收藏关注后私信博主要

你可能感兴趣的:(python爬虫,python,爬虫,开发语言,pip)