Mechanize 并不是这个特定“动态”站点的理想选择。最简单的高级方法是通过 selenium 实现浏览器自动化。
虽然我使用requests 和BeautifulSoup HTML 解析器使它工作。实现这一目标的关键是 1) 电影通过 XHR 请求加载到 http://movietv.to/index/loadmovies 和 2) 此请求需要发送 token - 它可以从主页上的 script 元素中提取。
完整的工作实现:
import re
import requests
from bs4 import BeautifulSoup
search = "Godfather"
token_pattern = re.compile(r'var token_key="(.*?)";')
with requests.Session() as session: # maintaining web-scraping session
session.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"}
# extract token
response = session.get("http://movietv.to/")
soup = BeautifulSoup(response.content, "html.parser")
script = soup.find("script", text=token_pattern).get_text()
match = token_pattern.search(script)
if not match:
raise ValueError("Cannot find token!")
token = match.group(1)
# search for the movies
response = session.post("http://movietv.to/index/loadmovies", data={
"loadmovies": "showData",
"page": "1",
"abc": "All",
"genres": "",
"sortby": "Popularity",
"quality": "All",
"type": "movie",
"q": search,
"token": token
})
soup = BeautifulSoup(response.content, "html.parser")
for movie in soup.select("div.item"):
title = movie.find("h2", class_="movie-title")
print(title.get_text())
打印找到的电影:
The Godfather
The Godfather: Part II
The Godfather: Part III