今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题。
首先用Chrome浏览器访问斗鱼官网:
当然是选择颜值辣:
然后鼠标放在第一张图片上,检查元素:
发现图片的url在这里:
我们会发现data-original和src内容是一样的,那就选择哪个就可以喽,我们打开这个url试一下:
OK,就是这个了,然后对这个标签在的位置进行分析,发现:
所有图片都在这个div标签下,那就好办了,开始写代码:
首先:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/62.0.3202.89 Safari/537.36'
}
导入requests和bs4库,顺带带上了headers。
然后是进行筛选,获取到所有图片的url
def get_img_url():
url = 'https://www.douyu.com/directory/game/yz'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
girl_list = soup.select('div[class="items items01 item-data clearfix"]')
for girl in girl_list:
li_list = girl.select('li')
for li in li_list:
yield li.img['data-original']
复制过来为啥缩进都没有了,好奇怪,各位可以自行缩进,逻辑不难,应该都能看懂。
最后是主函数,对图片进行保存:
if __name__ == '__main__':
img_url = get_img_url()
for num, img in enumerate(img_url):
img_response = requests.get(img)
# response = requests.get('https://rpic.douyucdn.cn/live-cover/appCovers/2017/12/05/1977639_20171205204858_big.jpg')
Image = img_response.content
Image_path = './pictures/%s.png' % num
fp = open(Image_path, 'wb')
fp.write(Image)
fp.close()
还是没有缩进,for以下的内容都是for循环内的。。。
到此,大功告成,成果如下
还有一个问题没实现,就是当前页只有这么多主播照片,第二页还有呢,各位可以自行加上翻页,这样就可以将所有颜值的主播照片都怕去了下来
。。