異步加載數(shù)據(jù):簡單的舉個例子,有些網(wǎng)頁不需要換頁贷掖,只要網(wǎng)頁上的滾動條滑到最下方苹威,它就會自動加載部分?jǐn)?shù)據(jù)牙甫,和瀑布流一樣调违,可以持續(xù)不斷的加載數(shù)據(jù) ,這些持續(xù)加載的數(shù)據(jù)就屬于異步數(shù)據(jù)(由js控制且轨,和請求網(wǎng)址的Request不是一起的)虚婿。
示例網(wǎng)站的URL:https://knewone.com/things/
首先,使用瀏覽器工具檢查至朗,選擇Network下的XHR,然后鼠標(biāo)往下滑锹引,讓網(wǎng)頁不斷的加載數(shù)據(jù)唆香,觀察XHR的變化嫌变,如圖。
實際上不難看出躬它,只是在Request URL的末尾加上了頁碼后綴初澎。
然后檢查元素,鼠標(biāo)繼續(xù)往下滑虑凛,讓它加載數(shù)據(jù),然后觀察網(wǎng)頁源代碼的變化软啼。
通過觀察發(fā)現(xiàn)桑谍,每次加載數(shù)據(jù)之后,網(wǎng)頁中就會多出幾個
class="thing"
的article
標(biāo)簽祸挪。然后打開其中的一個article
標(biāo)簽就可以發(fā)現(xiàn)我們要爬取的元素锣披。
分析完頁面元素之后,下面用代碼來實現(xiàn)其中一個頁面的爬取。
from bs4 import BeautifulSoup
import requests
url = 'https://knewone.com/things/?page=2'
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
imgs = soup.select('a.cover-inner > img')
titles = soup.select('section.content > h4 > a')
links = soup.select('section.content > h4 > a')
for img,title,link in zip(imgs,titles,links):
data = {
'img':img.get('src'),
'title':title.get('title'),
'link':link.get('href')
}
print(data)
完成之后接下來做多頁面的爬取增热,并且設(shè)計一個自控頁碼的函數(shù),最終代碼如下摄咆。
from bs4 import BeautifulSoup
import requests
import time
url = 'https://knewone.com/things/?page='
def get_page(url,data=None):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
imgs = soup.select('a.cover-inner > img')
titles = soup.select('section.content > h4 > a')
links = soup.select('section.content > h4 > a')
if data==None:
for img,title,link in zip(imgs,titles,links):
data = {
'img':img.get('src'),
'title':title.get('title'),
'link':link.get('href')
}
print(data)
def get_more_pages(start,end):
for one in range(start,end):
get_page(url+str(one))
time.sleep(1)
get_more_pages(1,8)