多线程爬斗图网

#多线程爬斗图网站
import requests,threading
from lxml import etree
from bs4 import BeautifulSoup

#1.获取网页,获取源码
def get_html(url):
    # url='https://www.doutula.com/article/list/?page=1'
    headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
    request=requests.get(url=url,headers=headers)
    #response=request.text,但建议用content
    response=request.content
    # print response
    return response
#调用
# get_html(1)

#2.获取内页的url,从主页中获取斗图的每一个url,每个url的源码
def get_img_html(html):
    soup=BeautifulSoup(html,'lxml') #创建一个对象
    all_a=soup.find_all('a',class_='list-group-item') #过滤
    print all_a
    # print len(all_a)
    for i in all_a:
        img_html=i['href']#找到内页url,获取源码的超链接
        print img_html
        # print type(img_html)
    # return img_html

# start_html=get_html(1)
# get_img_html(start_html)



#4.获取每个图片
def get_img(html):
    soup=etree.HTML(html) #初始化打印源码,带自动打印源码功能
    items=soup.xpath('//div[@class="article_des"]') #解析网页方法,@表示选定属性为class的盒子
    #每个图片都在每个的<div class="article_des">下面
    for item in items:
        imgurl_list=item.xpath('table/tbody/tr/td/a/img/@onerror') #这里是在上面item基础上的下面的路径,故不用//
        start_save_img(imgurl_list)  #多线程获取图片
        # print imgurl_list
        # return imgurl_list
#imgurl_list的url=οnerrοr="this.src='//img.doutula.com/production/uploads/image/2017/04/12/20170412979284_MdmIjc.jpg'"
# a="this.src='//img.doutula.com/production/uploads/image/2017/04/12/20170412979284_MdmIjc.jpg'".split('=')
# print a[-1]
# print a[-1][1:2]
#5,下载图片
#x=1 ,图片的命名用1,2,3...等命名,因为函数内部的x会增加1,故在函数内部要将x定义成global x
def save_img(img_url):
    #global x
    #x+=1
    img_url=img_url.split('=')[-1][1:2].replace('jp','jpg')
    print u'正在下载'+'http:'+img_url
    img_content=requests.get('http:'+img_url).content
    #在D:新建 一个文件夹叫doutu
    #with open('doutu/%s.jpg' %x,'wb') as f:  这是文件名用1,2,3写入
    with open('/Users/mac/Desktop/doutu/%s.jpg' % img_url.split('/')[-1], 'wb') as f:
        f.write(img_content) #写入到文件


#6多线程
def start_save_img(imgur_list):
    for i in imgur_list:
        th=threading.Thread(target=save_img,args=(i,))
        th.start()



#3.多页
def main():
    start_url='https://www.doutula.com/article/list/?page='
    for i in range(1,5):
        start_html=get_html(start_url.format(i)) #并获取外页url
        get_img_html(start_html)  #获取内页url里面的源码

if __name__=='__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值