无法从评论中的网页抓取数据

时间:2018-01-25 13:28:27

标签: python python-3.x web-scraping beautifulsoup

我在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

1 个答案:

答案 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")])