我正在嘗試從 IMDB 中抓取最熱門的劇集,起初我使用漂亮的湯來實作它以獲取前 10,000 條記錄,并且效果很好。但是,在 10,000 條記錄之后,IMDB 鏈接從數字變為下一頁的隨機字母字串,如下所示。
我希望能夠從此頁面導航: https ://www.imdb.com/search/title/?title_type=tv_episode&num_votes=600,&sort=user_rating,desc&start=9951&ref_=adv_nxt
到下一頁:
https://www.imdb.com/search/title/?title_type=tv_episode&num_votes=600,&sort=user_rating,desc&after=WzguNSwidHQwOTQzNjU3IiwxMDAwMV0=&ref_=adv_nxt
然后通過單擊下一步按鈕從頁面中抓取所有記錄。我想使用硒,但我無法讓它作業。任何幫助表示贊賞
代碼:
import time
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd
import numpy as np
import requests
url = "https://www.imdb.com/search/title/?title_type=tv_episode&num_votes=600,&sort=user_rating,desc"
driver = webdriver.Chrome("chromedriver.exe")
driver.get(url)
page = 1
series_name = []
episode_name = []
while page != 9951:
url = f"https://www.imdb.com/search/title/?title_type=tv_episode&num_votes=600,&sort=user_rating,desc&start={page}&ref_=adv_nxt"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
episode_data = soup.findAll('div', attrs={'class': 'lister-item mode-advanced'})
for store in episode_data:
h3=store.find('h3', attrs={'class': 'lister-item-header'})
sName =h3.findAll('a')[0].text
series_name.append(sName)
eName = h3.findAll('a')[1].text
episode_name.append(eName)
time.sleep(2)
page = 50
uj5u.com熱心網友回復:
注意: Selenium 是一個選項,但它不是完成任務所必需的 - 也可以find_all()在較新的代碼中使用,而不是在舊語法中使用findAll()
使用請求,告別關注頁數——改為使用hrefnext 元素的屬性提供的 url。
if (a := soup.select_one('a[href].next-page')):
url = 'https://www.imdb.com' a['href']
else:
break
例子
為了表明它正在作業,初始 url 設定為&start=9951您可以洗掉它以從第一頁開始,如果您愿意:
import time
from bs4 import BeautifulSoup
import requests
url = "https://www.imdb.com/search/title/?title_type=tv_episode&num_votes=600,&sort=user_rating,desc&start=9951"
series_name = []
episode_name = []
while True:
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
episode_data = soup.find_all('div', attrs={'class': 'lister-item mode-advanced'})
for store in episode_data:
h3=store.find('h3', attrs={'class': 'lister-item-header'})
sName =h3.find_all('a')[0].text
series_name.append(sName)
eName = h3.find_all('a')[1].text
episode_name.append(eName)
time.sleep(2)
if (a := soup.select_one('a[href].next-page')):
url = 'https://www.imdb.com' a['href']
else:
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431741.html
上一篇:如何防止將相同資料的多個副本添加到我的firebase資料庫
下一篇:使用VBA進行網頁抓取
