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文档的搜索 

扫描二维码关注公众号,回复: 4004971 查看本文章

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

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

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/83903888