首页 > 解决方案 > Web Scraping LXML 和请求

问题描述

我刚刚开始学习如何使用 LXML 和请求进行一些网络抓取。我想编写一个应用程序,它会告诉我特定电影院正在播放哪些电影。

电影清单

这是我的代码:

import requests
from lxml import html

# Getting the Page
HTML = requests.get('https://www.eventcinemas.com.au/Sessions#cinemas=86')
doc = html.fromstring(HTML.content)

# Getting the Movie
path1 = doc.xpath('//div[@class="body-content"]')[0]
path2 = path1.xpath('.//div[@class="content"]')[0]
path3 = path2.xpath('.//div[@id="first-dates"]')[0]
path4 = path3.xpath('.//div[@class="split-content"]')[0]
path5 = path4.xpath('.//div[@id="session-list"]')[0]

我一直在尝试获取电影标题。我觉得这与课程有关,但不确定:

<div class="movie-container list-view"...

我也试过这个,但它没有给我任何价值:

path6 = path5.xpath('.//div[@class="movie-container list-view"]')
print(path6)

但是,打印的输出什么都没有,据我了解,这意味着它找不到目录。

标签: pythonpython-3.xpython-requestslxmlpython-3.7

解决方案


您不能对动态页面使用简单的请求和解析库。

注意主要有两种类型的页面,即:

  • 静态页面是人类可读的纯文本,通常采用 html、xml、json 等格式。
  • 动态页面是其构造通过异步请求“即时”执行的页面。

在 Google Chrome 上,在开发者工具 > 网络中,您可以查看构建页面的请求。

例如,que 可以找到此链接:https ://www.eventcinemas.com.au/Cinemas/GetSessions?cinemaIds=86 。很多时候,当你想从网站查询一些信息时,有一种比解析(脏)html 更简单的方法。

但是,当您除了阅读页面没有其他选择时,您需要将其模拟为任何浏览器。为此目的,有一些库作为 selenium webdriver,https: //pypi.org/project/selenium/ ,虽然对于 RAM 和时间来说非常繁重。


推荐阅读