#多线程爬斗图网站
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()
转载请注明原文地址: https://ju.6miu.com/read-672854.html