#多线程爬斗图网站 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()
多线程爬斗图网
最新推荐文章于 2020-05-09 13:10:07 发布