首页 > 解决方案 > 美丽的汤 CSS 选择器没有找到任何东西

问题描述

我正在使用 Python 3。下面的代码应该让用户在命令行中输入搜索词,然后搜索 Google 并运行结果页面的 HTML 以查找与 CSS 选择器匹配的标签 ('.r一种')。

假设我们搜索“猫”一词。我知道我正在寻找的标签存在于“猫”搜索结果页面上,因为我自己查看了页面源。

但是当我运行我的代码时,linkElems 列表是空的。出了什么问题?

    import requests, sys, bs4

    print('Googling...')
    res = requests.get('http://google.com/search?q='  +' '.join(sys.argv[1:]))
    print(res.raise_for_status())

    soup = bs4.BeautifulSoup(res.text, 'html5lib')
    linkElems = soup.select(".r a")
    print(linkElems)

标签: pythoncssbeautifulsoupcss-selectorspython-requests

解决方案


".r" 类由 Javascript 呈现,因此在收到的 HTML 中不可用。您可以使用 selenium 或类似的方法渲染 javascript,也可以尝试一种更有创意的解决方案来从标签中提取链接。首先通过在没有“.r”类的情况下查找标签来检查标签是否存在。soup.find_all("a")然后作为示例,您可以使用正则表达式提取所有以“/url?q=”开头的 url

import re
linkelems = soup.find_all(href=re.compile("^/url\?q=.*"))

推荐阅读