在爬取豆瓣网页时遇到这种情况,想要爬取片名信息,但是发现不同片名的标签种类不同,给爬取工作造成了一些困难,具体情况如下
不难想电影“这个杀手不太冷的”的片名获取途径可如1.1代码所示,1为其在原网页的代码
1.
<div class="title">
<a href="https://movie.douban.com/subject/1295644/" target="_blank">
这个杀手不太冷 Léon
</a>
1.1
findTitle = re.compile(r'<div class="title">\n<a href=".*">\n\s*(.*?)\s*</a>')
for item in soup.find_all('div', class_="bd doulist-subject"):
item = str(item)
print(titles)
titles = re.findall(findTitle, item)
print(titles)
而电影“肖申克的救赎”片名获取途径可如2.1代码所示,2为其在原网页的代码
2.
<div class="title">
<a href="https://movie.douban.com/subject/1292052/" target="_blank">
<img style="width: 16px; vertical-align: text-top;" src="https://img3.doubanio.com/f/sns/5741f726dfb46d89eb500ed038833582c9c9dcdb/pics/sns/doulist/ic_play_web@2x.png">
肖申克的救赎 The Shawshank Redemption
</a>
2.1
findTitle = re.compile(r'<div class="title">\n<a href=".*">\n<img src=".*"/>\s*(.*?)\s*</a>')
for item in soup.find_all('div', class_="bd doulist-subject"):
item = str(item)
print(titles)
titles = re.findall(findTitle, item)
print(titles)
两个源代码的区别就是否有“<img src="https://img3.doubanio.com/f/sns/5741f726dfb46d89eb500ed038833582c9c9dcdb/pics/sns/doulist/ic_play_web@2x.png" style="width: 16px; vertical-align: text-top;"/>”
即爬取时compile对象里是否加“<img src=".*"/>”
这里写成“<img src=".*"/>?”显然是不行的,起不到判断的作用(好像“?”不能作用到Tag上?原来并没有遇到过这种状况)
而且写成“(<img src=".*"/>)?”会运行成:
[('<img src="https://img3.doubanio.com/f/sns/5741f726dfb46d89eb500ed038833582c9c9dcdb/pics/sns/doulist/ic_play_web@2x.png" style="width: 16px; vertical-align: text-top;"/>', '肖申克的救赎 The Shawshank Redemption')]
所以目前是不清楚怎么同时去爬取这两片名,希望有人来帮忙解惑