您好,登錄后才能下訂單哦!
接下來會依次準備三個案例(如果要把每一個點都精通的話大約要花費一個月,我說的精通是指自己將代碼不用查資料寫出來,以下暫未整理):
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.findall('a',class='list-group-item randomlist')#class是關鍵字所以此處加
for i in all_a:
print(i)#i是指<a 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.findall('a',class='list-group-item randomlist')#class是關鍵字所以此處加
for i in all_a:
print(i)#i是指<a 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.findall('a',class='list-group-item randomlist')#class是關鍵字所以此處加
for i in all_a:
#print(i)#i是指<a 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"]')#@是用來選取屬性,找到相應盒子
br/>soup=etree.HTML(html)#解析之前的初始化,自動修正代碼的
items=soup.xpath('//div[@class="artile_des"]')#@是用來選取屬性,找到相應盒子
br/>imgurl_list=item.xpath('table/tbody/tr/td/a/img/@onerror')#onerror這個是所需要的屬性,很重要
#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()
未完待續,后期會有改進
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。