11月10日python爬虫分析网页的模块lxml和Beautiful Soup

unicode是字符集,不是编码方式

ajax返回的是json字符串,json字符是类字典的形式,里面是键值对

format自动排列 # 定义文件存储的位置,原始的定义要改变的地方是定义在字符串中的 fileName = 'g:/spider/poetry/poetry{0}.html' f = open(fileName.format(z), "wb")

for 循环的结果如果在外边打印的话只能打印最后一个结果,如果想打印全部的话必须要把print放在for循环里面

使用requests获得网页对象html之后,如果乱码: 1. html.encoding = 'gb2312'  # 将下载结果用gb2312编码 print(html.text)            # 然后以文本的形式打印出来

2. html = r.content   # 先将下载的返回结果转换成二进制    html =str(html, "gb2312")   # 然后转换成以gb2312编码字符串    print(html) lxml和Beautiful Soup都是用于解析网页的第三方模块, lxml比Beautiful Soup解析速度更快,并且lxml是用C语言编写的,Python 标准库中自带了 xml 模块,但是性能不够好,而且缺乏一些人性化的 API, 相比之下,第三方库 lxml 是用 Cython 实现的,而且增加了很多实用的功能,可谓爬虫处理网页数据的一件利器  lxml 大部分功能都存在 lxml.etree中    Beautiful Soup的用法:  1.先转换成soup对象,然后可以用find(只返回一个)和find_all(返回所有)进行匹配 from bs4 import  BeautifulSoup broken_html ='<ul class=country> <li>Area</li> <li>Population</ul>' soup = BeautifulSoup(broken_html,'html.parser') fixed_html = soup.prettify()

print(fixed_html)

ul = soup.find('ul', attrs={'class': 'country'}) print(ul) print(ul.find('li'))  # 只返回第一个 print(ul.find_all('li'))  lxml的用法:  网页下载下来以后是个字符串的形式,如果是一个破损的代码,可以用一下的方式补全:  import lxml.html broben_html = "<ul class=country> <li>Area <li>Population</ul>" tree = lxml.html.fromstring(broben_html) fixed_html = lxml.html.tostring(tree,pretty_print=True) print(fixed_html) 使用etree.fromstring(str)构造一个 etree._ElementTree对象 使用 etree.tostring(t)返回一个字符串

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

lxml支持两种查找信息方式:xpath和css选择器

XPath,全称XML Path   Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索 

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。 /text() 是用来读取内容的 XPath 实在太强大了,在定位元素方面绝对是秒杀 CSS 选择器

css选择器: 基本和CSS选择器的用法一样 div p 是选择<div>元素内的所有<p>元素 div > p 是选择<div>元素下的直接子元素p

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券