【发布时间】:2020-03-22 10:37:07
【问题描述】:
在我上一个问题(How to speed up parsing using BeautifulSoup?)中,我问了如何更快地爬取HTML网站,答案对我帮助很大。
但是我遇到了另一个问题。这是关于爬票的价格。
我在网页中收到 JSON 文本,指的是我上一个问题的答案。我可以在 JSON 中获取几乎所有有关节日的信息,例如标题、日期、地点、海报图片 url 和表演者。
但是没有关于定价的信息,所以我尝试在网站的其他部分获取价格。
当我打开谷歌浏览器开发者模式时,有一个关于定价的表格(包括韩语,但你不必懂):
<table cellpadding="0" cellspacing="0">
<colgroup>
<col>
<col style="width:20px;">
<col>
</colgroup>
<tbody id="divSalesPrice">
<tr>
<td>2일권(입장권)</td>
<td> </td>
<td class="costTd">
<span>140,000 원</span>
</td>
</tr>
<tr>
<td>1일권(입장권)</td>
<td> </td>
<td class="costTd">
<span>88,000 원</span>
</td>
</tr>
</tbody>
</table>
跨度标签中的数字(140000、80000)是我要提取的价格。所以我认为使用 Soup 会有效:
from bs4 import BeautifulSoup
import requests
def Soup(content):
soup = BeautifulSoup(content, 'lxml')
return soup
def DetailLink(url):
req = requests.get(url)
soup = Soup(req.content)
spans = soup.findAll('span', class_='fw_bold')
links = [f'{url[:27]}{span.a["href"]}' for span in spans]
return links
def Price():
links = DetailLink('http://ticket.interpark.com/TPGoodsList.asp?Ca=Liv&SubCa=Fes')
with requests.Session() as request:
for link in links:
req = request.get(link)
soup = Soup(req.content)
price = soup.find('tbody', id='divSalesPrice')
print(price)
Price()
然而,结果令人失望……
<tbody id="divSalesPrice">
<!-- 등록된 기본가 가져오기 오류-->
<tr>
<td colspan="3" id="liBasicPrice">
<ul>
</ul>
</td>
</tr>
</tbody>
评论“등록된 기본가 가져오기 오류”的意思是“获取价格时出错。”
是否意味着网站运营商阻止了其他用户在页面中抓取价格信息?
【问题讨论】:
-
当您首先在本地保存网页并将其用作输入时,您的代码是否有效?
-
@usr2564301 没有。在保存的HTML文件中,还有一条关于错误的注释。
-
晚安亲爱的邦邦 - 非常感谢您的回复 - 我很高兴。但是,如果我尝试在 ATOM 上的 MX-Linux 上运行它,我会得到以下信息:`文件“/home/martin/.atom/python/examples/bs_ticket_interpark.py”,第 14 行链接 = [f'{url[ :27]}{span.a["href"]}' for span in spans] ^ SyntaxError: invalid syntax [Finished in 0.507s]` - 为什么会这样 - 我现在没有胶水
标签: python beautifulsoup