python从入门到放弃篇37(selenium库,requests库,time库)联合爬取豆瓣全部小说图片

今天,这是在之前的36篇基础上进行升级版本。

我本来想着就是再加一个页面的循环,就能爬取所有图书的图片了,但是,后来发现事情不简单。。因为,如果爬取全部页面,沿用36篇的代码就会出现图片重名的情况,那就白忙活半天时间了鸭,所以,自己想了个办法,设计一个计数器,当开始爬一个图片时,计数器就会加一,自动生成不同的图片名,这样就能保证爬下所有图片了。而且,还有一个问题,我的图片并不一定想要保存在pycharm编辑器路径下的文件夹(目录)内。所以,我由想了一个办法来解决,自己去网上搜了python创建文件夹的方法,解决了,very nice!!虽然一开始把创建文件夹的函数放在循环体内部,导致报错,说文件夹已经创建,不能重复创建。。。

案例初始网址:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=0&type=T

完整代码:

from lxml import etree
from selenium import webdriver
import time
import urllib.request
import requests
import os

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)

path = os.mkdir('E:\\images')
count = 0
for u in range(0,1000,20):
    url = 'https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start='+str(u)+'&type=T'
    driver.get(url)
    driver.implicitly_wait(3)

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    html = driver.page_source
    select = etree.HTML(html)
    for i in range(1,21):
        xpath_road = '//*[@id="subject_list"]/ul/li['+str(i)+']/div[1]/a/img/@src'
        img_href = select.xpath(xpath_road)
    #print(img_href)
        for e in img_href:
            print(e)
            count += 1
        #time.sleep(1.5)
            img = requests.get(e,headers=headers)
            with open('E:\\images\\img{}.jpg'.format(count),'wb+') as f:
                f.write(img.content)
                time.sleep(1.5)

首先,跟之前的操作类似的,先导入可能会用到库,如下图:
在这里插入图片描述
接着,我们开启万花筒模式(无界面),如下图:
在这里插入图片描述
然后,我先在E盘创建一个名为images文件夹(目录),之后,设计一个计数器,用来区别图片名,防止图片重名,免得浪费时间爬了半天就20张图片。如下图:
在这里插入图片描述
接着,我们在原来36篇单页面的基础上升级,观察url的start值自己构造url,以20为步长,来实现翻页提取书籍图片。
在这里插入图片描述
所以有:
在这里插入图片描述
接下来,还是和之前的36篇代码一致,都是对当前页面的代码进行提取。所以有:

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    html = driver.page_source
    select = etree.HTML(html)
    for i in range(1,21):
        xpath_road = '//*[@id="subject_list"]/ul/li['+str(i)+']/div[1]/a/img/@src'
        img_href = select.xpath(xpath_road)

接着,我们要提取链接,每提取一个图片链接,对应的count计数器就加一,这样可以保证图片不重名。因为,我之前在E盘创建了一个images文件夹(目录),所以,我可以直接写入进去,大家可根据需求自定义自己的文件夹。所以有:
在这里插入图片描述
运行结果,如果我没有算错,50个页面,一个页面20张图片,一共1000张图片。。太多了,我就只截取一部分展示了。如下图:
在这里插入图片描述
刚刚爬完了,少了一张,999刚好,与左边豆瓣的图书图片进行对比,确实只有999张。。。
在这里插入图片描述
最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。真舒服,刚好写完文章,出去锻炼喽。开森!!

猜你喜欢

转载自blog.csdn.net/weixin_43408020/article/details/107720434