使用正则表达式解析网站
常见的正则字符和含义
| 模式 | 描述 |
|---|---|
| . | 匹配任意字符,除了换行符 |
| * | 匹配前一个字符0次或多次 |
| s | 匹配空白字符 |
| + | 匹配前一个字符1次或多次 |
| ? | 匹配前一个字符0次或1次 |
| S | 匹配任何非空白字符 |
| ^ | 匹配字符串开头 |
| $ | 匹配字符串末尾 |
| () | 匹配括号内的表达式,也表示一个组 |
| d | 匹配数字,等价于[0-9] |
| D | 匹配任何非数字,等价于[^0-9] |
| w | 匹配字母数字,等价于[A-Za-z0-9] |
| W | 匹配非字母数字,等价于[^A-Za-z0-9] |
| [] | 用来表示一组字符 |
接下来介绍的是:re.matchre.reachre.findall
re.match:从字符串起始位置匹配一个模式,如果从起始位置匹配不了,match就返回none.
re.match(pattern,string,flags=0)
pattern是正则表达式,包含一些特殊的字符,string为要匹配的字符串,flags用来控制正则表达式的匹配方式。
re.search扫描整个字符串并返回第一个成功的匹配
re.findall可以找到所有的匹配
使用BeautifulSoup解析网站
BeautifulSoup可以从HTML或XML文件中提取数据
主要的解析器及其优缺点:
| 解析器 | 使用方法及优缺点 |
|---|---|
| python标准库 | BeautifulSoup(Markup,“html.parser”)优势:python的内置标准库,执行速度适中;文档容错能力强; 劣势L:速度较慢 |
| Lxml HTML解析器 | BeautifulSoup(markup,“xml”) 优势:速度款,文档容错能力强,bs4自带;无缺点 |
| lxml XML解析器 | BeautifulSoup(markuo,[“lxml”,“xml”]) BeautifulSoup(markup,“xml”) 优势:速度快,唯一支持XML的解析器;无缺点 |
| html5lib | BeautifulSoup(markup,“html5lib”) 优势:最好的容错性,以浏览器的方式解析文档,生成html5格式的文档;劣势:速度慢,不依赖外部扩展 |
使用BeautifulSoup获取博客标题(代码如下)
import requests
from bs4 import BeautifulSoup
link="http://www.sansostang.com/"
headers={
'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
r=requests.get(link,headers=headers)
soup=BeautifulSoup(r.text,"lxml")
first_title=soup.find("h1",class_="post-title").a.text.strip()
print("第一篇文章的标题:",first_title)
title_list=soup.find_all("h1",class_="post-title")
for i in range(len(title_list)):
title=title_list[i].a.text.strip()
print("第%s篇文章的标题是:%s"%(i+1,title))
使用lxml获取博客的标题
import requests
from lxml import etree
link="http://www.sansostang.com/"
headers={
'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
r=requests.get(link,headers=headers)
soup=etree.HTML(r.text)
title_list=html.xpath('//h1[[@class="post-title"]/a/text()')
print(title-list)
XPath路径表达式及其描述
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点 |
| / | 从根节点选取 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置 |
| . | 选取当前节点 |
| ·· | 选取当前节点的父节点 |
| @ | 选取属性 |
| 路径表达式 | 结果 |
| bookstore | 选取bookstore元素的所有子节点 |
| /bookstore | 选取根元素bookstore |
| bookstore/book | 选取属于bookstore子元素的所有book元素 |
| //book | 选取所有book子元素,无论他在文档的什么位置 |
| bookstore//book | 选择属于bookstore元素后代的所有book元素,无论它们位于bookstore下的什么位置 |
| //@lang | 选取名为lang的所有属性 |
最后
以上就是瘦瘦白开水最近收集整理的关于爬虫实践入门:解析网页的全部内容,更多相关爬虫实践入门内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复