欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一次python爬虫批量下载一个校花网站的妹子图片

程序员文章站 2022-06-17 10:24:50
...

学python也快2个礼拜了,从开始看别人写的爬虫代码,然后试着抄着学习,感觉没太大进步,最大收获就是改了几处bug(可能有些地方不适用我的pyyhon平台报错)。

中午看到一个帖子校花妹子图使用爬虫进行批量下载,看了下,感觉不错(我说的技术,哈哈哈)。

然后决定自己写一个爬虫,已经看书两个礼拜了,也要练一练了。

声明:代码写的不怎么好,大神别嫌弃,可以给些建议。

先来点图片养个眼,提升下动力。

记录一次python爬虫批量下载一个校花网站的妹子图片

这个是批量下载的一个妹子的图片。

开始爬虫:本次使用的环境是linux-ubantu,python3。

import urllib.request
from bs4 import BeautifulSoup
import requests

先获取页面链接内容

get_url = urllib.request.Request(url, headers)
res = urllib.request.urlopen(get_url).read()

res是获取的html网页。使用python的现成库BeautifulSoup去进行搜索。先去网页F12分析:

如下图:

记录一次python爬虫批量下载一个校花网站的妹子图片

我画红框的那两个关键点,第一个是图片的list表,从这里可以获取每一个校花的列表。

soup = BeautfulSoup(res, "html.parser")
pict_list = soup.find('div', id='list_img').find_all('a', target='_blank')

获取完的信息是下面这样的,可以看出一个校花的信息出现了两次,那就写一个判断的每次只取一个(方法简单不单独写了,所有代码附在最后)

记录一次python爬虫批量下载一个校花网站的妹子图片

find方法找到一整个列表, find_all方法发现每个校花的详细信息。

第二个烈表示其中之一校花的网页链接,通过这个链接可以知道这个校花所有的图片,然后打开这个网页,再针对单个校花进行分析:看图

记录一次python爬虫批量下载一个校花网站的妹子图片

分析得出:每张妹子图都在div的class =="p-tmb"中间,使用find_all方法找出所有的,然后单独找出每一张的图片所在的信息行,使用find找出来。

soup = BeautifulSoup(ret_girl_url, "html.parser")
picture = soup.find_all('div', class_='p-tmb')

仔细看,jpg格式的链接,是不完整的,自己把头部加一下,头部就是这个网页的首页地址。

获得了这么多信息,就可以直接进行下载保存了

记录一次python爬虫批量下载一个校花网站的妹子图片

这就下载好了,下载好的图片在一开始就已经展示了,在这里就不再展示了,把源码附在这里,想学习的可以看看,也可以给点建议,共同进步。

import urllib.request
from bs4 import BeautifulSoup
import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102UBrowser/6.1.2107.204 Safari/537.36'}

url_list = []
def get_href(url):
    if url in url_list:
        return None
    else:
        url_list.append(url)
        return url

def down_pic(url):
    r = requests.get(url, headers)
    name = url[-10:-4]
    print(name)
    with open(name+'.jpg', 'wb') as f:
        for chunk in r.iter_content(1024):
            if chunk:
                f.write(chunk)

def get_url_list(url):
    get_url = urllib.request.Request(url, headers=headers)
    res = urllib.request.urlopen(get_url).read() 
    soup = BeautifulSoup(res, "html.parser")
    pict_list = soup.find('div', id='list_img').find_all('a', target='_blank')
    return pict_list

def get_new_url(content):
    html = content['href']
    new_url = get_href(html)
    if new_url == None:
        return None
    else:
        return new_url
def get_picture_url_info(url):
    girl_url = urllib.request.Request(url, headers=headers)
    ret_girl_url = urllib.request.urlopen(girl_url).read()
    soup = BeautifulSoup(ret_girl_url, "html.parser")
    picture = soup.find_all('div', class_='p-tmb')
    return picture

def get_addr(girl_url):
    tmp = girl_url.find('img')
    addr = tmp['src']
    www = "http://www.xiaohuar.com"
    return www+addr

def start():
    url = 'http://www.xiaohuar.com/list-1-\d+.html'
    lst = get_url_list(url)
    for line in lst:
        new_url = get_new_url(line)
        if new_url == None:
            continue
        info = get_picture_url_info(new_url)
        for girl in info:
            addr = get_addr(girl)
            print('addr:', addr)
            down_pic(addr)
        break

if __name__ == '__main__':
    start()

相关标签: python爬虫