BeautifulSoup 解析网页: 正则表达
学习资料:
正则表达式, 是处理文本信息的重要工具, 除了 Python, 在其他的程序语言中, 也有十分重要的地位. 如果将正则表达式 + BeautifulSoup, 岂不是完美中的完美, 哈哈. 我们今天就来看看, 在 BeautifulSoup 中如何使用正则表达式, 获取更有难度的信息.
正则表达式 ¶
正则表达式很厉害, 它能用简单的规则匹配到多样化的文本信息. 在做爬虫教程之前, 我特地做了一个正则表达式的教程, 为爬虫做铺垫. 所以有兴趣了解使用正则表达式的朋友, 都可以看看这个非常全的正则教程.
这次的教程有一些表格形式的 HTML, 在表格中, 有一些信息的格式类似, 我们先用 BeautifulSoup 筛选一些, 然后完全可以用正则给匹配出来. 比如你想下载这个页面的图片, 我们就可以将图片形式的 url 个匹配出来. 之后再下载就简单多了.
正则匹配 ¶
我们先读取这个网页. 导入正则模块 re
.
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
# if has Chinese, apply decode()
html = urlopen("https://mofanpy.com/static/scraping/table.html").read().decode('utf-8')
我们发现, 如果是图片, 它们都藏在这样一个 tag 中:
<td>
<img src="https://mofanpy.com/static/img/course_cover/tf.jpg">
</td>
所以, 我们可以用 soup
将这些 <img>
tag 全部找出来, 但是每一个 img 的链接(src)都可能不同.
或者每一个图片有的可能是 jpg 有的是 png, 如果我们只想挑选 jpg 形式的图片, 我们就可以用这样一个正则
r'.*?\.jpg'
来选取. 把正则的 compile 形式放到 BeautifulSoup 的功能中, 就能选到符合要求的图片链接了.
soup = BeautifulSoup(html, features='lxml')
img_links = soup.find_all("img", {"src": re.compile('.*?\.jpg')})
for link in img_links:
print(link['src'])
"""
https://mofanpy.com/static/img/course_cover/tf.jpg
https://mofanpy.com/static/img/course_cover/rl.jpg
https://mofanpy.com/static/img/course_cover/scraping.jpg
"""
又或者我们发现, 我想选一些课程的链接, 而这些链接都有统一的形式, 就是开头都会有
https://morvan.
, 那我就将这个定为一个正则的规则, 让 BeautifulSoup 帮我找到符合这个规则的链接.
course_links = soup.find_all('a', {'href': re.compile('https://morvan.*')})
for link in course_links:
print(link['href'])
"""
https://mofanpy.com/
https://mofanpy.com/tutorials/scraping
https://mofanpy.com/tutorials/machine-learning/tensorflow/
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/
https://mofanpy.com/tutorials/data-manipulation/scraping/
"""
学习了这么多实用的方法, 我们接下来就来做一个小实战, 让我们的爬虫在百度百科上自由爬行, 在各个百科网页上跳来跳去.
相关教程
降低知识传递的门槛
莫烦很常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛。 免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。
想当算法工程师拿高薪?转行AI无门道?莫烦也想祝你一臂之力,市面上机构繁杂, 经过莫烦的筛选,七月在线脱颖而出, 莫烦和他们合作,独家提供大额 【培训优惠券】, 让你更有机会接触丰富的教学资源、培训辅导体验, 祝你找/换工作/学习顺利~