python:网络爬虫之正则获取电影名称和封面

python:网络爬虫之正则获取电影名称和封面,第1张

概述 利用正则表达式查找电影名称和电影封面示例代码显示如下:importreimportsslimporturllib.requestfrombs4importBeautifulSoupurl="https://movie.douban.com/chart"headers={"user-agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_15

 

利用正则表达式查找电影名称和电影封面

示例代码显示如下:

import reimport sslimport urllib.requestfrom bs4 import BeautifulSoupurl = "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_contexturl_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="鬼灭之刃 剧场版 无限列车篇"  src="https://img9.doubanio.com/vIEw/photo/s_ratio_poster/public/p2623798236.jpg" wIDth="75"/><img alt="酒精计划"  src="https://img9.doubanio.com/vIEw/photo/s_ratio_poster/public/p2628440526.jpg" wIDth="75"/><img alt="地球改变之年"  src="https://img2.doubanio.com/vIEw/photo/s_ratio_poster/public/p2638827823.jpg" wIDth="75"/><img alt="小人物"  src="https://img2.doubanio.com/vIEw/photo/s_ratio_poster/public/p2633966702.jpg" wIDth="75"/><img alt="无依之地"  src="https://img1.doubanio.com/vIEw/photo/s_ratio_poster/public/p2630453887.jpg" wIDth="75"/><img alt="智能大反攻"  src="https://img3.doubanio.com/vIEw/photo/s_ratio_poster/public/p2637896820.jpg" wIDth="75"/><img alt="扎克·施奈德版正义联盟"  src="https://img9.doubanio.com/vIEw/photo/s_ratio_poster/public/p2634360594.jpg" wIDth="75"/><img alt="真人快打"  src="https://img1.doubanio.com/vIEw/photo/s_ratio_poster/public/p2639148697.jpg" wIDth="75"/><img alt="新神榜:哪吒重生"  src="https://img9.doubanio.com/vIEw/photo/s_ratio_poster/public/p2631711326.jpg" wIDth="75"/><img alt="徐福"  src="https://img1.doubanio.com/vIEw/photo/s_ratio_poster/public/p2625736779.jpg" wIDth="75"/><img  src="https://img9.doubanio.com/vIEw/photo/s_ratio_poster/public/p485887754.jpg"/><img  src="https://img2.doubanio.com/vIEw/photo/s_ratio_poster/public/p1675053073.jpg"/><img  src="https://img1.doubanio.com/vIEw/photo/s_ratio_poster/public/p1374786017.jpg"/><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:网络爬虫之正则获取电影名称和封面全部内容,希望文章能够帮你解决python:网络爬虫之正则获取电影名称和封面所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存