python - 美丽的汤 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)
解决方案
".r" 类由 Javascript 呈现,因此在收到的 HTML 中不可用。您可以使用 selenium 或类似的方法渲染 javascript,也可以尝试一种更有创意的解决方案来从标签中提取链接。首先通过在没有“.r”类的情况下查找标签来检查标签是否存在。soup.find_all("a")
然后作为示例,您可以使用正则表达式提取所有以“/url?q=”开头的 url
import re
linkelems = soup.find_all(href=re.compile("^/url\?q=.*"))
推荐阅读
- ruby - 如何将表示 IEEE 754 浮点数的十六进制数字打印为 ruby 中的浮点数
- javascript - Laravel 使用 Ajax 以一种形式更新数据和文件?当方法/类型='PUT'
- javascript - 为什么这个函数不返回值?
- node.js - Heroku 部署在“修剪 devDependencies”步骤中继续失败
- string - 将用户输入转换为汇编中的所有大写字母 (NASM)
- javascript - 如何在不滚动整个页面的情况下向下滚动组件
- django - 使用 SSH 隧道的 PostgreSQL/psycopg2 密码验证
- python - 用python写一个特定的公式
- django - 在 Django 中,创建新子实例时我无法通过 url 传递 pk 值
- laravel - VSCode 如何安装 Laravel 代码补全?