簡體   English   中英

Soup 可以在一個 IMBD 頁面上工作,但不能在另一個頁面上工作。 怎么解決?

[英]Soup works on one IMBD page but not on another. How to solve?

url1 = "https://www.imdb.com/user/ur34087578/watchlist"
url = "https://www.imdb.com/search/title/?groups=top_1000&ref_=adv_prv"

results1 = requests.get(url1, headers=headers)
results = requests.get(url, headers=headers)
soup1 = BeautifulSoup(results1.text, "html.parser")
soup = BeautifulSoup(results.text, "html.parser")

movie_div1 = soup1.find_all('div', class_='lister-item-content')
movie_div = soup.find_all('div', class_='lister-item mode-advanced')
#using unique tag for each movie in the respective link

print(movie_div1)
#empty list
print(movie_div)
#gives perfect list

為什么 movie_div1 給出一個空列表? 我無法識別 URL 結構中的任何差異,以表明代碼應該不同。 所有線索表示贊賞。

不幸的是,您想要的 div 由 javascript 代碼處理,因此您無法通過抓取原始 html 請求來獲得。

您可以通過瀏覽器獲取的請求 json 獲取您想要的電影,您無需使用beautifulsoup 抓取代碼,從而使您的腳本更快。

第二個選項是使用 Selenium。

祝你好運。

正如@SakuraFreak 提到的,您可以解析收到的 JSON 。 但是,此 JSON 響應嵌入在 HTML 本身中,該響應隨后由瀏覽器 JS 轉換為 HTML(這就是您所看到的<div class="lister-item-content">...</div>

例如,您可以通過以下方式從 HTML 中提取 JSON 內容以顯示關注列表中的電影/節目名稱:

import requests
from bs4 import BeautifulSoup
import json

url = "https://www.imdb.com/user/ur34087578/watchlist"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

details = str(soup.find('span', class_='ab_widget'))

json_initial = "IMDbReactInitialState.push("
json_leftover = ");\n"

json_start = details.find(json_initial) + len(json_initial)
details = details[json_start:]
json_end = details.find(json_leftover)

json_data = json.loads(details[:json_end])

imdb_titles = json_data["titles"]
for item in imdb_titles.values():
    print(item["primary"]["title"])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM