ValueError:不支持或无效的CSS选择器:" unit-4"蟒蛇

时间:2015-01-27 10:31:26

标签: python web-scraping beautifulsoup

我刚尝试使用python,Beautifulsoup进行网页抓取,以便从购物网站获取产品的网址。

在这里,我提供了简单的代码:

import requests
from bs4 import BeautifulSoup

root_url = 'http://www.flipkart.com'
index_url = root_url + '/tablets'

def get_item_url():
    response = requests.get(index_url)
    soup = BeautifulSoup(response.text)
    return [a.attrs.get('href') for a in soup.select('div.product-unit unit-    4 browse-product-section a[href^=/digiflip-pro-et701-tablet]') 


print(get_item_url())

运行此程序会产生如下错误:

File "C:\Python27\lib\site-packages\bs4\element.py", line 1300, in select
'Unsupported or invalid CSS selector: "%s"' % token)
ValueError: Unsupported or invalid CSS selector: "unit-4"

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

查看Beautiful Soup文档,我发现在select()中的属性之间放置空格会在其他标记下面搜索标记。因此,select()正在unit-4下方某处寻找名为div.product-unit的属性,然后在browse-product-section下方寻找unit-4。没有这样的属性,因此它返回错误。

select()中的属性实际上是该网页上存在的HTML类的名称,因此您必须在每个网页上附加.才能找到它们。但是,我认为你真正想要的更像是:

return [a.attrs.get('href') for a in soup.select('div.product-unit a[href^=/digiflip-pro-et701-tablet]')]

在该div下面查找href并返回

['/digiflip-pro-et701-tablet/p/itme27y5v2ws5cfm?pid=TABDWMDPGHPNYND7', '/digiflip-pro-et701-tablet/p/itme27y5v2ws5cfm?pid=TABDWMDPGHPNYND7', '/digiflip-pro-et701-tablet/p/itme27y5v2ws5cfm?pid=TABDWMDPGHPNYND7&ref=70ca8997-80a5-412d-9b94-6d5fb55f1277', '/digiflip-pro-et701-tablet/p/itme27y5v2ws5cfm?pid=TABDWGBMYSEMWHUY&ref=70ca8997-80a5-412d-9b94-6d5fb55f1277']

顺便提一下,您也可以将div.product-unit替换为unit-4,甚至可以将select('a[href^=/digiflip-pro-et701-tablet]')替换为{{1}},并获得相同的输出。