【问题标题】:find_all() returns Nonefind_all() 返回无
【发布时间】:2015-07-10 21:17:41
【问题描述】:

我正在尝试使用漂亮的汤在谷歌网页中获得美元价值。但是,对 find_all() 函数的每次调用都返回 None。我不知道我必须做什么。请帮帮我!

代码:

#Get dollar value   
from requests import *    
from bs4 import *    
r = get("https://www.google.com.br/#q=dolar")

if (r.status_code != 200):
  print ("conexão inválida")
else:
  print("Prosseguindo...")

  soup = BeautifulSoup(r.content, "html.parser")

  print (soup.find_all("div", attrs = {"class" : "vk_ans vk_bk"}))
  print (soup.find_all("div", class_="vk_ans vk_bk"))
  print (soup.find_all(string="reais"))
  print (soup.find_all(class_="vk_ans"))
  print (soup.select("div.vk_ans.vk_bk"))
  print (soup.html.find_all("div", class_="vk_ans"))
  print (soup.select(".vk_ans vk_bk"))

我正在使用 python 3.4 和 bs4.4.0 视窗 8.1

【问题讨论】:

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


    【解决方案1】:

    find_all 正在返回 None,因为它没有找到您请求的元素。请注意,您在浏览器中看到的 https://www.google.com.br/#q=dolar 的 HTML 代码可能与 requests.get 获取的代码不同。

    您可以通过在响应字符串中搜索类名来轻松检查:

    In [13]: "vk_ans" in r.content
    Out[13]: False
    

    代码中没有字符串vk_ans的踪迹。

    另外,还有两个注意事项:

    • 使用 Google 获取美元的当前价值不是一个好主意。尝试使用其他网站,该网站的变化不像 Google 的主页那么频繁。
    • 不要使用from X import *。您正在污染脚本的全局命名空间。

    【讨论】:

    • 感谢您的建议!我发现了问题:谷歌有 JavaScript 代码,因为这个请求方法不读取页面源。我正在使用 selenium 来解决这个问题,但是它打开一个网络浏览器并不酷。
    猜你喜欢
    • 2019-12-12
    • 2019-03-25
    • 2017-12-12
    • 2021-10-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多