接下来会依次准备三个案例(如果要把每一个点都精通的话大约要花费一个月,我说的精通是指自己将代码不用查资料写出来,以下暂未整理): import requests,threading#多线程处理与控制 from lxml import etree from bs4 import BeautifulSoup #获取源码 def get_html(url): url='http://www.doutula.com/?qqdrsign=01495' #获取网络地址,但这个地方写死了,怎么办呢,因为我们还没有做多页 headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'} #上一步是模拟浏览器信息,固定格式,可记下来 request=requests.get(url=url,headers=headers)#对网址发送一个get请求 response=request.content#获取源码,比test稍微好一点 #print(response) return response #接下来是获取外页,即图片自身的源码 def get_img_html(html): soup=BeautifulSoup(html,'lxml')#解析网页方式,自带html.pparser all_a=soup.find_all('a',class_='list-group-item random_list')#class是关键字所以此处加_ for i in all_a: print(i)#i是指<a rel="nofollow" class="list-group-item random_list" href="http://www.doutula.com/article/detail/6001799"> img_html=get_html(i['href'])#是用来获取超链接这一部分源码 print(img_html) #http://www.doutula.com/article/list/?page=2 a=get_html(1) get_img_html(a) 好了,我们已经可以获取一部分的源码了,这样,我们接下来的工作是开始做多页
import requests,threading#多线程处理与控制 from lxml import etree from bs4 import BeautifulSoup #获取源码 def get_html(url): #url='http://www.doutula.com/?qqdrsign=01495'#获取网络地址,但这个地方写死了,怎么办呢,因为我们还没有做多页 headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'} #上一步是模拟浏览器信息,固定格式,可记下来 request=requests.get(url=url,headers=headers)#对网址发送一个get请求 response=request.content#获取源码,比test稍微好一点 #print(response) return response #接下来是获取外页,即图片自身的源码 def get_img_html(html): soup=BeautifulSoup(html,'lxml')#解析网页方式,自带html.pparser all_a=soup.find_all('a',class_='list-group-item random_list')#class是关键字所以此处加_ for i in all_a: print(i)#i是指<a rel="nofollow" class="list-group-item random_list" href="http://www.doutula.com/article/detail/6001799"> img_html=get_html(i['href'])#是用来获取超链接这一部分源码 print(img_html) #http://www.doutula.com/article/list/?page=2 def main(): start_url='http://www.doutula.com/article/list/?page=' for i in range(1,10): start_html=get_html(start_url.format(i))#将前十页的页数传递进来,来获取前十页源码 get_img_html(start_html)#来获取图片所在的链接源码
main() 最后是总的源码: import requests,threading#多线程处理与控制 from lxml import etree#解析方式,直接找到里面的内容 from bs4 import BeautifulSoup #获取源码 def get_html(url): #url='http://www.doutula.com/?qqdrsign=01495'#获取网络地址,但这个地方写死了,怎么办呢,因为我们还没有做多页 headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'} #上一步是模拟浏览器信息,固定格式,可记下来 request=requests.get(url=url,headers=headers)#对网址发送一个get请求 response=request.content#获取源码,比test稍微好一点 #print(response) return response #接下来是获取外页,即图片自身的源码 def get_img_html(html): soup=BeautifulSoup(html,'lxml')#解析网页方式,自带html.pparser all_a=soup.find_all('a',class_='list-group-item random_list')#class是关键字所以此处加_ for i in all_a: #print(i)#i是指<a rel="nofollow" class="list-group-item random_list" href="http://www.doutula.com/article/detail/6001799"> img_html=get_html(i['href'])#是用来获取超链接这一部分源码 get_img(img_html) #print(img_html) #http://www.doutula.com/article/list/?page=2 #获取图片的url: def get_img(html): soup=etree.HTML(html)#解析之前的初始化,自动修正代码的 items=soup.xpath('//div[@class="artile_des"]')#@是用来选取属性,找到相应盒子 for item in items: imgurl_list=item.xpath('table/tbody/tr/td/a/img/@onerror')#onerror这个是所需要的属性,很重要 start_save_img(imgurl_list) #print(imgurl_list) #start_save_img(imgurl_list) #上处已找到图片 #接下来是下载by多线程 x=1#设置命名 #拼接完整链接,文件open def save_img(img_url): global x #设置全局变量 x+=1 img_url=img_url.split('=')[-1][1:-2].replace('jp','jpg') print("正在下载"+'http:'+img_url) img_content=requests.get(img_url).content with open('doutu/%s.jpg'% x,'wb') as f: f.write(img_content) print('已打印第%s张图片'%x);
#打造多线程 def start_save_img(imgurl_list): for i in imgurl_list: print(i) th=threading.Thread(target=save_img,args=(i,)) th.start() def main(): start_url='http://www.doutula.com/article/list/?page=' for i in range(1,10): start_html=get_html(start_url.format(i))#将前十页的页数传递进来,来获取前十页源码 get_img_html(start_html)#来获取图片所在的链接源码
if name=='main': main() 未完待续,后期会有改进