我正在努力收集Vudu电影的价格。但是,当我尝试从相关的div容器中提取数据时,它返回为空。
from bs4 import BeautifulSoup
url = "https://www.vudu.com/content/movies/details/title/835625"
response = get(url)
html_soup = BeautifulSoup(response.text, 'html.parser')
type(html_soup)
price_container = html_soup.find_all('div', class_ = 'row nr-p-0 nr-mb-10')
结果:
In [43]: price_container
Out[43]: []
正如您在此处所见,价格信息包含在我指定的div类中:
答案 0 :(得分:0)
如果您查看页面来源,<body>
包含以下HTML:
<div id="loadingScreen">
<div class="loadingScreenViewport">
<div class="loadingScreenBody">
<div id="loadingIconClock">
<div class="loadingIconBox">
<div></div><div></div>
<div></div><div></div>
</div>
</div>
</div>
</div>
</div>
其他所有内容都是<script>
标记(JavaScript)。该网站主要受JavaScript驱动。也就是说,所有其他内容都是动态添加的。
正如您所看到的,页面源中没有div
标记class="row nr-p-0 nr-mb-10"
(这是requests.get(...)
返回的内容)。这就是为什么,price_container
是一个空列表。
您需要使用其他工具(例如Selenium)来抓取此页面。
答案 1 :(得分:0)
感谢您提示使用Selenium。我能够通过以下代码获取价格信息。
<!-- start date -->
<mat-form-field *ngIf="true">
<input matInput [matDatepicker]="picker1" placeholder="Choose a date" [formControl]="startDate">
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
<mat-datepicker #picker1></mat-datepicker>
</mat-form-field>
<!-- end date -->
<mat-form-field *ngIf="true">
<input matInput [matDatepicker]="picker2" placeholder="Choose a date" [formControl]="endDate">
<mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
<mat-datepicker #picker2></mat-datepicker>
</mat-form-field>