我在python中编写了一个脚本来从网站上获取一些数据。看来我是以正确的方式做到的。但是,当我打印数据时,我收到错误list index out of range
。数据在评论范围内。所以在我的脚本中我尝试使用python的内置注释处理方法。谁能指出我哪里出错?
链接到网站:website_link
我迄今为止尝试过的脚本:
import requests
from bs4 import BeautifulSoup, Comment
res = requests.get("replace_with_the_above_link")
soup = BeautifulSoup(res.text, 'lxml')
for comment in soup.find_all(string=lambda text:isinstance(text,Comment)):
sauce = BeautifulSoup(comment, 'lxml')
items = sauce.select("#tco_detail_data")[0]
data = ' '.join([' '.join(item.text.split()) for item in items.select("li")])
print(data)
这是追溯:
Traceback (most recent call last):
File "C:\Users\Local\Programs\Python\Python35-32\new_line_one.py", line 8, in <module>
items = sauce.select("#tco_detail_data")[0]
IndexError: list index out of range
请点击以下链接查看我想要抓取的数据部分:Expected_output_link
答案 0 :(得分:1)
没有评论包含带有“#tco_detail_data”标记的html,因此select
会返回一个空列表,当您尝试选择第一个项目时会引发IndexError
。
但是,您可以在“ul#tco_detail_data”标签中找到数据。
res = requests.get(link)
soup = BeautifulSoup(res.text, 'lxml')
data = soup.select_one("#tco_detail_data")
print(data)
如果您希望列表中有data
,
data = [list(item.stripped_strings) for item in data.select("ul")]
如果您喜欢字符串,
data = '\n'.join([item.get_text(' ', strip=True) for item in data.select("ul")])