zoukankan      html  css  js  c++  java
  • 爬取妹子图片

    学习练习爬虫的时候写了一个爬取妹子的小程序玩玩。

    from bs4 import BeautifulSoup
    import requests
    import os
    from threading import Thread
    
    '''
        soup.find( name , attrs , recursive , string , **kwargs )函数
            name:查找哪一个标签
            attrs:标签里的指定那个参数,比如class
        注意:
            BeautifulSoup()返回的类型是<class 'bs4.BeautifulSoup'>
            find()返回的类型是<class 'bs4.element.Tag'>
            find_all()返回的类型是<class 'bs4.element.ResultSet'>
            <class 'bs4.element.ResultSet'>不能再进行find/find_all操作
    '''
    def first_page(url):
        '''
            从主页的图片链接进去匹配
            http://www.mzitu.com/155036
            http://www.mzitu.com/155036/2
            找到最大页数,循环访问
        '''
        headers = {
                'UserAgent': 'Mozilla/5.0 (Windows NT 6.1 rv: 2.0.1) Gecko/20100101 Firefox/4.0.1',
        } 
        html = requests.get(url,headers=headers)
        soup = BeautifulSoup(html.text,'html.parser')
        girl_url_list = soup.find('div',class_='main-image').find_all('a')['href']
        #最大页数
        pic_max = soup.find_all('span')[10].text
        #图片标题,soup对象
        title = soup.find('h2',class_='main-title').text
        pic_urls = []
        for i in range(1,int(pic_max)+1):
            pic_url = url +'/'+ str(i)
            pic_urls.append(pic_url)
        return pic_urls,title
    
    def get_link(url):
        '''
            从上层的http://www.mzitu.com/155036/2链接中匹配到图片链接
            http://i.meizitu.net/2018/10/18b01.jpg
        '''
        headers = {
                'UserAgent': 'Mozilla/5.0 (Windows NT 6.1 rv: 2.0.1) Gecko/20100101 Firefox/4.0.1',
        } 
        link_dict = {}
        res = first_page(url)
        print(res)
        for pic_url in res[0]:
            html = requests.get(pic_url, headers=headers)
            mess = BeautifulSoup(html.text,'html.parser')
            link = mess.find('img', alt=res[-1])['src']  # link为<class 'bs4.element.Tag'>对象
            pic_name =  link.split('/')[-1]
            link_dict[link] = pic_name
        return link_dict
    
    def download(url):
        '''
            从图片地址下载图片
        '''
        link_dict = get_link(url)
        for link in link_dict:
            headers = {
                'UserAgent': 'Mozilla/5.0 (Windows NT 6.1 rv: 2.0.1) Gecko/20100101 Firefox/4.0.1',
                'Referer':link #由于网站有防盗链,所以要告诉服务器我是从哪个页面链接过来的
            }
            html = requests.get(link,headers=headers)
            os.chdir('C:/Users/asus/Desktop/code/9.爬虫/简单web爬虫/picture') #选择保存文件夹
            with open(link_dict[link],'wb') as fp:
                fp.write(html.content)
            
    if __name__ == '__main__':
      #这里的图片主页链接由于没爬取,先手动添加,有点low。。。 urls
    = ['http://www.mzitu.com/47580','http://www.mzitu.com/108003','http://www.mzitu.com/48342']

      for url in urls: t = Thread(target=download,args=(url,)) #开启线程爬取 t_list.append(t)   for t in t_list: t.start()   for t in t_list: t.join()
  • 相关阅读:
    C#将JSON字符串对象序列化与反序列化
    Chrome 中的 JavaScript 断点设置和调试技巧
    JS 关闭 页面 浏览器 事件
    使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
    js/jquery判断浏览器的方法小结
    Javascript中document.execCommand()的用法
    js 点击默认另存 ,不是打开 Blob 操作
    浅析jQuery删除节点的三个方法
    IE 和Firefox的js兼容性总结
    removeNode is not defined removeNode is not a function
  • 原文地址:https://www.cnblogs.com/kmnskd/p/9928319.html
Copyright © 2011-2022 走看看