跟著老師做的練習,我發現自己沒有能獨立做出來。算法方面不如老師做的優秀。
爬取得是knewone.com網站,此網站是國內異步加載數據的網站。
跟著麻瓜老師的課程學習的異步加載,第一個難點是,找到page=2,page=3....通過看源代碼找到的。
找到之后,就輕松許多了,那就是下載圖片了。
代碼如下:
#執行的是下載page3頁面的圖片到本地文件夾。
from bs4 import BeautifulSoup
import requests,urllib.request
url='https://knewone.com/things/categories/ge-ren-pei-shi/xiang-bao?sort_by=latest&page=3'
path='/Users/pro/Desktop/a2/'
#注意一下headers的標準寫法
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36 QQBrowser/4.1.4132.400'
}
# 采用代理,否則打開不了網頁。格式留在這里,未必能用到。
proxies = {"http": "127.0.0.1:9743"}
def download(url):
filename=url.split('!')[-2] #[-1]表示倒數第一個。[-2]表示倒數第二個。這里是為了處理鏈接的格式,因為要把鏈接的一部分當做圖片名字的
urllib.request.urlretrieve(url,path + filename[-10:])
print("done")
#下面的函數測試可以使用,很正常。
def get_one_pagelink(url):
wb_data=requests.get(url,headers=headers)
soup=BeautifulSoup(wb_data.text,'lxml')
imgs=soup.select('a.cover-inner > img')
for img in imgs:
src=img.get('src')
print(src)
download(src) #這里很關鍵,這是算法方面的提高。我就沒有想到這么解決問題。
get_one_pagelink(url)# 執行程序,得出結果。下載圖片到本地a2文件夾。
#一開始,我打算下載所有頁面的鏈接,然后再讓for遍歷,挨個下載到本地,思路我相信沒錯,但是沒有老師的這個思路簡潔。
最后升級了一下,下載了前20頁的圖片到本地文件夾,代碼如下
from bs4 import BeautifulSoup
import requests,urllib.request
url='https://knewone.com/things/categories/ge-ren-pei-shi/xiang-bao?sort_by=latest&page=3'
path='/Users/pro/Desktop/a2/'
#注意一下headers的標準寫法
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36 QQBrowser/4.1.4132.400'
}
# 采用代理,否則打開不了網頁。格式留在這里,未必能用到。
proxies = {"http": "127.0.0.1:9743"}
def download(url):
filename=url.split('!')[-2] #[-1]表示倒數第一個。[-2]表示倒數第二個。這里是為了處理鏈接的格式,因為要把鏈接的一部分當做圖片名字的
urllib.request.urlretrieve(url,path + filename[-10:])
print("done")
#下面的函數測試可以使用,很正常。
def get_one_pagelink(url):
wb_data=requests.get(url,headers=headers)
soup=BeautifulSoup(wb_data.text,'lxml')
imgs=soup.select('a.cover-inner > img')
for img in imgs:
src=img.get('src')
print(src)
download(src) #這里很關鍵,這是算法方面的提高。我就沒有想到這么解決問題。
#這段代碼,我也不理解,就是抄老師的,原封不動相當于。很成功。這個for遍歷有些吊炸天。
all_imglinks = ['https://knewone.com/things/categories/ge-ren-pei-shi/xiang-bao?sort_by=latest&page={}'.format(number) for number in range(1,10)]
for single_url in all_imglinks:
get_one_pagelink(single_url)