python - 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)
但是,打印的输出什么都没有,据我了解,这意味着它找不到目录。
解决方案
您不能对动态页面使用简单的请求和解析库。
注意主要有两种类型的页面,即:
- 静态页面是人类可读的纯文本,通常采用 html、xml、json 等格式。
- 动态页面是其构造通过异步请求“即时”执行的页面。
在 Google Chrome 上,在开发者工具 > 网络中,您可以查看构建页面的请求。
例如,que 可以找到此链接:https ://www.eventcinemas.com.au/Cinemas/GetSessions?cinemaIds=86 。很多时候,当你想从网站查询一些信息时,有一种比解析(脏)html 更简单的方法。
但是,当您除了阅读页面没有其他选择时,您需要将其模拟为任何浏览器。为此目的,有一些库作为 selenium webdriver,https: //pypi.org/project/selenium/ ,虽然对于 RAM 和时间来说非常繁重。
推荐阅读
- django - Django 存储和 Boto3 未从 AWS S3 检索媒体
- c++ - 用Eclipse开发的VSCode C++项目构建
- javascript - API 更改后重新渲染 React 组件
- javascript - 画布 toDataURL 返回空/损坏
- bootstrap-4 - Bootstrap 5 flex-grow-0 不能正常工作
- gitlab - 在Gitlab ci yml中转义星号符号
- bash - 如何使用ffmpeg有序地合并目录中的所有视频?
- postgresql - 存储过程从 SQL Server 到 PostgreSQL 的转换
- android - 当输入获得焦点时,键盘在键盘类型之间闪烁
- vba - 如何使用带有 VBA 的 Excel 所在的相同文件路径从 DEP 下载文件?