从imdb中检索信息的问题
问题描述:
我试图从imdb监视列表中获取电影标题。这是我的代码:从imdb中检索信息的问题
import requests, bs4
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
print(soup.find_all('.lister-item-header'))
即使“.lister项头”在Chrome开发者控制台它不会在请求模块下载的HTML文件存在存在。我也尝试使用正则表达式。什么是检索标题的最佳方式?
答
你应该以这种方式选择他们班级的元素。
import requests
import bs4
url = 'http://www.imdb.com/chart/top'
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
rows = soup.select('.titleColumn > a')
for row in rows:
print(row.text)
或者你可以这样做:
import requests
import bs4
url = 'http://www.imdb.com/chart/top'
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
rows = soup.find_all('td', class_='titleColumn')
for row in rows:
print(row.a.text)
的数据是从被嵌入到原始的HTML文件JSON对象负载,所以我们可以分析它,并获得标题。
import requests
import bs4
import json
url = 'http://www.imdb.com/user/ur69187878/watchlist?ref_=wt_nv_wl_all_1'
res = requests.get(url)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
# rows = soup.find_all('h3', class_='list-item-header')
js_elements = soup.find_all('script')
js_text = None
search_str = 'IMDbReactInitialState.push('
for element in js_elements:
text = element.text
if search_str in text:
js_text = text.strip()
break
json_start = js_text.index(search_str) + len(search_str)
json_text = js_text[json_start:-2]
json_obj = json.loads(js_text[json_start:-2])
for title in json_obj['titles']:
json_title = json_obj['titles'][title]
print(json_title['primary']['title'])
但我不得不说,这是不是攻击这类问题的一般方法,如果你想有一个通用的解决方案用于其数据是从JSON或API加载的所有网页,您可以使用其他方式,如Selenium
。
+0
这很好用,但它似乎不适用于监视列表。通过打印出res.text,您可以看到电影标题通过javascript调用,而不是在浏览器中显示的html。下面是我的代码'导入请求 进口BS4 URL = 'http://www.imdb.com/user/ur69187878/watchlist?ref_=wt_nv_wl_all_1' 解析度= requests.get(URL) res.raise_for_status( ) 对于行中的行: print(row('h3',class _ ='list-item-header')) .a.text)' – David
尝试[selenium](http://selenium-python.readthedocs.io/) –
而不是网页抓取,我建议使用[IMDbPY](https://pypi.python.org/pypi/IMDbPY)之类的东西。网络刮是尴尬和脆弱的;总的来说,这是我尽量避免的。 – Chris