如何保存微博的所有图片链接并下载图片到本地
对于一个爬虫,其爬取的目标不仅限于文字,图片、语音、视频均有可能,我开源的微博爬虫之话题爬虫,设定之初就是将微博内容、评论等文字形式和图片作为爬取目标的,只不过由于图片无法保存在 csv 中(不考虑 base64 编码解码这种形式,因为如果将图片 base64 编码作为结果 csv 的一列,那当我们打开 csv 时,这一列内容(肉眼无法分辨的长字符串)的展示对于我们来说是毫无意义甚至是一脸懵逼的),所以我仅仅保存了所有图片的 url 在 原始图片 url 这一列中,如果有多个图片,就以 , 分隔。
但是今天不止一个读者跟我反馈,图片 url 保存不了了,就算是有图片的微博,原始图片 url 列也是空的。
我调试了下,发现是在提取图片那部分代码,xpath 表达式出现点问题,可能是微博网页稍微改动了下,修复之后,又能流畅地保存 url 链接了,代码变动的地方主要是 extract_picture_urls 这个函数,可以直接复制下面的函数体取代之前的,也可以直接上 github 下载。
def extract_picture_urls(self,info, weibo_id):
print('开始提取图片 URL')
a_list = info.xpath('./div/a/@href')
all_pic = 'https://weibo.cn/mblog/picAll/' + weibo_id + '?rl=1'
if all_pic in a_list:
selector = self.deal_html(all_pic)
preview_picture_list = selector.xpath('//img/@src')
picture_list = [
p.replace('/thumb180/', '/large/')
for p in preview_picture_list
picture_urls = ','.join(picture_list)
print(picture_urls)
else:
picture_urls = '无'
if info.xpath('.//img/@src'):
preview_picture = info.xpath('.//img/@src')[-1]
picture_urls = preview_picture.replace(
'/wap180/', '/large/')
else:
sys.exit(
"爬虫微博可能被设置成了'不显示图片',请前往"
"'https://weibo.cn/account/customize/pic',修改为'显示'"
return picture_urls
except Exception as e: