专栏首页武军超python专栏11月10日python爬虫分析网页的模块lxml和Beautiful Soup

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 条评论
登录 后参与评论

相关文章

  • MongoDB简单总结

    1. mongoDB的exe文件安装完之后     -可以先在c盘根目录创建一个data文件夹, 在data文件夹中创建一个名字叫db的文件夹,用于存储数...

    武军超
  • 2018年7月30日初步熟悉ubuntu操作系统

    今天遇到的新单词: initialize  v 初始化、 torrent n 种子 alien n外星人  ware n商品   alienware ...

    武军超
  • SQL注入和XSS攻击

    SQL注入: 所谓SQL注入,就是通过把SQL命令插入到提交的Web表单或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,导致数据库中...

    武军超
  • python学习笔记:第6天 小数据池和

    通过上面的例子可以总结出:字符串和数字在之前有定义过的话,后续再用到这个变量时,不会再分配内存,而是直接把新的变量直接指向之前定义过的值,因此使用is判断时结果...

    py3study
  • 技术揭秘:设计工程师如何避开机器人“黑洞奇点”

    机器人奇点是个让生产商和用户都很头痛的问题,碰上了,严重点可能造成“机毁人亡”。那到底什么是机器人奇点,它是怎么形成的,怎么样才能避免机器人奇点?下面这篇文章由...

    机器人网
  • 花里胡哨![:n],[::n],[:,:,n],[...,n]都是什么鬼!

    a[:n]意思是取出a中的前n个元素,当n>len(a)时,不会报错哦,会返回a的所有元素。

    用户1564362
  • for循环输出杨辉三角

    葆宁
  • 19:肿瘤检测

    19:肿瘤检测 总时间限制: 1000ms 内存限制: 65536kB描述 一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩...

    attack
  • Python进阶教程(三)

    Python 进阶 我们在Python进阶教程(二),介绍了一些Python进阶用法。今天给大家介绍的是和c/c++混合编程的用法。我们都知道特别是Python...

    BrianLv
  • Github部分代码及整个仓库删除

    GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。

    许坏

扫码关注云+社区

领取腾讯云代金券