用python爬取校花网图片

环境python2.7

模块 requests、 urllib 、BeautifulSoup


首先,进行网页分析

网址:http://www.xiaohuar.com/hua/

1.查看网页源代码
通过查看源代码,发现图片的url在网页源代码中,所以可以直接获取,但是直接访问还不行,需要自己在前面加一点东西
2.构造网页链接
通过观察可以发现
http://www.xiaohuar.com/list-1-2.html
http://www.xiaohuar.com/list-1-3.html
所有网页都很类似,可以直接构造出不同页面的url

url_list = []
    i = 0
    for i in range(0,17):
        url = 'http://www.xiaohuar.com/list-1-'+str(i)+'.html'
        url_list.append(url)

3.获取图片的真正的url
在图片所在的页面,我看见图片href=”/d/file/20161117/a293f78e3738acfd03fd05c2694f1c7b.jpg”
直接访问发现无法打开该图,真正的href=’http://www.xiaohuar.com/d/file/20161117/a293f78e3738acfd03fd05c2694f1c7b.jpg‘类似于这种格式,所以我前面url进行补全

rurl = 'http://www.xiaohuar.com'+url_s

这里的url_s就是我在网页中提取到的href,代码是进行字符串拼接。
4.网页分析结束
用BeautifulSoup对网页进行解析,获取href

        soup = BeautifulSoup(r.text,'html.parser')
        for hua in soup.find_all(class_="img"):
            for a in hua.find_all('a'):
                if a.img != None:
                    urllist.append(a.img.get('src'))    
        for url_s in urllist:
            rurl = 'http://www.xiaohuar.com'+url_s
            rurl_list.append(rurl)

这里我在前面定义了一个rurl_list列表,将拼造好的url保存到列表中

完整代码

#coding:utf-8
import urllib
import requests
from bs4 import BeautifulSoup


def xiao():
    url_list = url_list_get()   #调用函数
    #添加头信息
    user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0'
    headers = {'User-Agent':user_agent}
    #创建src列表
    urllist = []
    #创建图片url列表
    rurl_list = []
    #遍历所有的页面
    for url in url_list:
        #进行request请求
        r = requests.get(url,headers=headers)
        #对r进行解码
        r.encoding = 'gb2312'
        #将请求到的网页进行解析
        soup = BeautifulSoup(r.text,'html.parser')
        #提取所有img标签
        for hua in soup.find_all(class_="img"):
            #提取img标签中的a标签
            for a in hua.find_all('a'):
                #a标签中有的没有src标签,进行去除
                if a.img != None:
                    #将获取的src保存到列表中
                    urllist.append(a.img.get('src'))
        #构造真正的图片url 
        for url_s in urllist:
            rurl = 'http://www.xiaohuar.com'+url_s
            #将真正的url保存到列表中
            rurl_list.append(rurl)
    return download(rurl_list)
def download(rurl_list):   #下载函数
    i = 0
    #将图片下载
    for rurl_r in rurl_list:
        print rurl_r
        urllib.urlretrieve(rurl_r,'img'+str(i)+'.jpg')
        i += 1
def url_list_get():
    url_list = []
    i = 0
    #构造1-16页的网址
    for i in range(0,17):
        url = 'http://www.xiaohuar.com/list-1-'+str(i)+'.html'
        url_list.append(url)
    return url_list
xiao()

遇到的问题:

1.编译器老是莫名奇妙的报错,我也不知到为什么会是这个样子
2.函数的调用很糊涂,很笨拙
3.给变量起名字的时候很纠结,不知道起什么样的名字好些,写完之后发现每个都差不多
4.需要多加练习

不知道自己的选择对不对,我看看能不能一条路走到黑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值