Python爬虫程序:实现妹子图网站多线程爬取

写了一个爬取妹子图网站的爬虫,供大家参考交流使用

#这是所有用到的库,如果缺少,会报错,可以通过pip install 库名 如pip install request
import requests
from lxml import etree
from fake_useragent import UserAgent
import time
import os
from multiprocessing import Pool
#最终图片保持的路径,可以修改成你想存储的位置新建一个photo文件夹
path = 'D:/photo/'
#模拟浏览器的请求头
ua = UserAgent()
headers = {'User-Agent':ua.random,'Referer':'https://www.mzitu.com/'}
#获取每一个页面的所有图片链接
def get_link(url):
    print(url)
    html = requests.get(url,headers=headers)
    one_data = etree.HTML(html.text)
    url_datas = one_data.xpath('//ul[@id="pins"]/li')
    for url_data in url_datas:
        single_url = url_data.xpath('a/@href')[0]
        get_info(single_url)
        time.sleep(2)
#将获取到的图集单链接中的图片进行爬取,并已每个图集的名字新建文件夹保存爬取到的图片
def get_info(link):
    wb_data = requests.get(link,headers=headers)
    two_selector = etree.HTML(wb_data.text)
    pages = int(two_selector.xpath('/html/body/div[2]/div[1]/div[4]/a/span/text()')[-2]) + 1
    title = two_selector.xpath('/html/body/div[2]/div[1]/div[3]/p/a/img/@alt')[0]
    try:
        os.mkdir('D:\\photo\\' + title)                #这里的路径你需要改成你的路径,也就是前面的path
        for i in range(1,pages):
            try:
                img_url = link +'/'+str(i)
                img_data = requests.get(img_url,headers=headers)
                img_selector = etree.HTML(img_data.text)
                img_link = img_selector.xpath('/html/body/div[2]/div[1]/div[3]/p/a/img/@src')[0]
                img = requests.get(img_link, headers=headers).content
                file_name = img_link.split('/')[-1]
                with open(path+title+'/'+file_name, 'wb') as f:
                    f.write(img)
                f.close()
            except:
                pass
    except:
        pass
#程序的主体部分,构造每一页的url,可以选择多线程或者单线程
if __name__  == '__main__':
    urls=['https://www.mzitu.com/page/{}/'.format(i) for i in range(1,20)]  #爬取页面数,修改“10”为你想爬取得页面
    pool =Pool(processes=4)
    pool.map(get_link,urls)
#上面两行为多线程爬取,4表示4线程
#for url in urls:
#        get_link(url)
#        time.sleep(2)
#如果担心封掉IP,可以用上面这三行,将多线程的两行注释掉即可!
#关注我的公众号“阿杰工坊”,同时回复关键词“python”即可获取总共 46G Python学习资料。

关于怎样建立IP代理池,使用代理进行爬虫,或者其他程序问题,关注我的公众号“阿杰工坊”,同时回复关键词“python”即可获取总共 46G Python学习资料。

微信扫一扫,关注微信公众号“阿杰工坊”获取更多优质软件、网站、教程