0.目录
1.分析页面
2.初步代码
3.代码解释
4.完整代码
5.提高海报质量
6.总结
7.更改后的完整代码
1.分析页面
上两次我们讲了xpath和beautifulsoup获取豆瓣最新上映电影的海报,这一次会使用正则表达式来获取。
xpath获取
BeautifulSoup获取
同样的,干活先看源代码
2.初步代码
这次我们同样是利用< img >标签下的src和alt获得我们想要的信息。
# encoding: utf-8
import requests
import re
from urllib import request
def get_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'Referer': 'https://movie.douban.com/',
}
response = requests.get(url, headers)
return response.text
def get_img(url):
text = get_page(url)
# 获取标签<div class="mod-bd">下的所有数据
lis = re.findall(r' <div class="mod-bd">(.*?)</div>', text, re.DOTALL)[0]
# 获取src和img
urls_img = re.findall(r'<li class="poster">.*?<img.*?src="(.*?)".*?/>', lis, re.DOTALL)
names = re.findall(r'<li class="poster">.*?<img.*?alt="(.*?)".*?/>', lis, re.DOTALL)
for url_img in urls_img:
print(url_img)
for name in names:
print(name)
def main():
url = 'https://movie.douban.com/cinema/nowplaying/guangzhou/'
get_img(url)
if __name__ == '__main__':
main()
展示运行结果的一部分:
3.代码解释
这次使用了标签< div class=“mod-bd” >和< /div >来限制范围,其实我们还可以使用其他的标签。比如< ul class=“lists” >和< /ul >,< div id=“nowplaying” >和< div id=“upcoming” >。唯一要注意的是,正则所做的只是匹配文本,没有所谓的标签范围的匹配。比如之前xpath使用的< div id=“nowplaying” >和< /div >,是因为在HTML里< div >标签开始,必然有< /div >与之对应,而xpath是会对应这一级标签的。但在正则里是不认识这些标签的,而是文本。所以,如果你使用< div id=“nowplaying” >和< /