【问题标题】:Python3 beautifulsoup module 'NoneType' ErrorPython3 beautifulsoup 模块“NoneType”错误
【发布时间】:2018-11-12 16:06:22
【问题描述】:

我是 beautifulsoup 模块的新手,但遇到了问题。我的代码很简单。毕竟,我试图从该网站上抓取是this 我正试图刮掉价格。 (大二(2)还有更多)

我的代码:

import urllib
from bs4 import BeautifulSoup


quote_page = 'https://www.bloomberg.com/quote/SPX:IND'

page = urllib.request.urlopen(quote_page)

soup = BeautifulSoup(page, 'html.parser')

price_box = soup.find('div', attr = {'class': 'price'})
price = price_box.text

print(price)

我得到的错误:

price = price_box.text

AttributeError: 'NoneType' object has no attribute 'text'

【问题讨论】:

  • 好像 price_box 没有返回有效元素。
  • 是的,但问题是为什么。
  • 好吧,但是我已经使用 find 方法得到了价格,使用 BeautifulSoup,我只是忘记了我是如何做到的。

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


【解决方案1】:

我使用了更强大的 CSS 选择器而不是 find 方法。由于只有一个div 元素的类price,我猜这是正确的元素。

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.bloomberg.com/quote/SPX:IND')
soup = BeautifulSoup(response.content, 'lxml')
price = soup.select_one('.price').text
print(price)

【讨论】:

  • 哎呀!我的不好,真的很抱歉:(
  • 它有效,尽管我不知道这段代码是什么意思,但它有效。
  • 基本上我选择了一个包含price类的元素。查看此链接:w3schools.com/cssref/css_selectors.asp
【解决方案2】:

另一种解决方案:

from bs4 import BeautifulSoup
from requests import Session

session = Session()
session.headers['user-agent'] = (
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
    'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
    '66.0.3359.181 Safari/537.36'
)

quote_page = 'https://www.bloomberg.com/quote/SPX:IND'

page= session.get(quote_page)

soup = BeautifulSoup(page.text, 'html.parser')

price_box = soup.find('meta', itemprop="price")

price = float(price_box['content'])

print(price)

【讨论】:

  • 你是否使用 session.headers 让网站没有注意到我们是机器人?
  • 他只是用不同的元素来拉价格。这个问题不需要假的用户代理。
  • 是的,您还可以添加随机用户代理 + 额外字段。
  • 用户代理和其他额外字段是网络抓取的最佳实践。请记住。
猜你喜欢
  • 1970-01-01
  • 2021-07-13
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
相关资源
最近更新 更多