python:网络爬虫之正则获取电影名称和封面
2021/5/16 12:25:24
本文主要是介绍python:网络爬虫之正则获取电影名称和封面,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
利用正则表达式查找电影名称和电影封面
示例代码显示如下:
import re import ssl import urllib.request from bs4 import BeautifulSoup url = "https://movie.douban.com/chart" headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36" } ssl._create_default_https_context = ssl._create_unverified_context url_obj = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(url_obj) html = response.read().decode('utf8') bs = BeautifulSoup(html, "html.parser") data = bs.find_all("img", {"src": re.compile("https:\/\/(.+?)\.jpg")}) for i in data: print(i)
-
使用用find_all()查找img标签且属性为src的数据
-
re.compile函数是编译正则表达式
-
\ 是转译符,把特殊含义的字符转成字面形式
-
() 是表达式编组,优先运行小括号的匹配
-
. 是任意匹配单个字符(包括符号、数字和空格等)
-
+ 是匹配前面的字符,子表达式或者括号里的字符至少匹配一次
-
? 是对它前面的正则式匹配0到1次重复。ab? 会匹配 'a' 或者 'ab'
正则表达式官方文档地址显示如下:
https://docs.python.org/zh-cn/3/library/re.html
运行后的结果显示如下:
<img alt="鬼灭之刃 剧场版 无限列车篇" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2623798236.jpg" width="75"/> <img alt="酒精计划" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2628440526.jpg" width="75"/> <img alt="地球改变之年" class="" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2638827823.jpg" width="75"/> <img alt="小人物" class="" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2633966702.jpg" width="75"/> <img alt="无依之地" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2630453887.jpg" width="75"/> <img alt="智能大反攻" class="" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2637896820.jpg" width="75"/> <img alt="扎克·施奈德版正义联盟" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2634360594.jpg" width="75"/> <img alt="真人快打" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2639148697.jpg" width="75"/> <img alt="新神榜:哪吒重生" class="" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2631711326.jpg" width="75"/> <img alt="徐福" class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2625736779.jpg" width="75"/> <img class="m_sub_img" src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p485887754.jpg"/> <img class="m_sub_img" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p1675053073.jpg"/> <img class="m_sub_img" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1374786017.jpg"/> <img class="m_sub_img" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2249048907.jpg"/>
但是只想要含有alt和src属性并且拿到alt和src属性的数据
示例代码显示如下:
data = bs.find_all("img", {"src": re.compile("https:\/\/(.+?)\.jpg")}) for i in data: print('电影名称:', i.attrs['alt'], ' || ', '电影图片:', i.attrs['src'])
-
i.attrs是获取全部属性
-
i.attrs['src'] 获取属性的值,和字典取值一样(因为i.attrs返回的就是一个字典对象)
运行后的显示结果如下:
Traceback (most recent call last): File "/Users/lifeng/python-projects/Test/pythonReptile/beautifulExample/run_beautiful_soup.py", line 29, in <module> print('电影名称:', i.attrs['alt'], ' || ', '电影封面:', i.attrs['src']) KeyError: 'alt' 电影名称:鬼灭之刃 剧场版 无限列车篇 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2623798236.jpg 电影名称:酒精计划 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2628440526.jpg 电影名称:地球改变之年 || 电影封面:https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2638827823.jpg 电影名称:小人物 || 电影封面:https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2633966702.jpg 电影名称:无依之地 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2630453887.jpg 电影名称:智能大反攻 || 电影封面:https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2637896820.jpg 电影名称:扎克·施奈德版正义联盟 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2634360594.jpg 电影名称:真人快打 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2639148697.jpg 电影名称:新神榜:哪吒重生 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2631711326.jpg 电影名称:徐福 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2625736779.jpg
alt和src属性的数据是拿到了,但是又抛出了KeyError错误,主要是因为img标签中有一部分是没有alt属性的,在字典取值时没取到,就进行了抛错误
示例代码显示如下:
data = bs.find_all("img", {"src": re.compile("https:\/\/(.+?)\.jpg")}) for i in data: try: print('电影名称:', i.attrs['alt'], ' || ', '电影图片:', i.attrs['src']) except KeyError as e: pass
使用try...except进行异常捕获,抛keyError就pass掉
运行后的结果显示如下:
电影名称:鬼灭之刃 剧场版 无限列车篇 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2623798236.jpg 电影名称:酒精计划 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2628440526.jpg 电影名称:地球改变之年 || 电影封面:https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2638827823.jpg 电影名称:小人物 || 电影封面:https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2633966702.jpg 电影名称:无依之地 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2630453887.jpg 电影名称:智能大反攻 || 电影封面:https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2637896820.jpg 电影名称:扎克·施奈德版正义联盟 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2634360594.jpg 电影名称:真人快打 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2639148697.jpg 电影名称:新神榜:哪吒重生 || 电影封面:https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2631711326.jpg 电影名称:徐福 || 电影封面:https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2625736779.jpg
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!
未完,待续…
一直都在努力,希望您也是
微信搜索公众号:就用python
这篇关于python:网络爬虫之正则获取电影名称和封面的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python