【问题标题】:Beautiful Soup in Python cannot find id despite the id existing尽管 id 存在,但 Python 中的 Beautiful Soup 找不到 id
【发布时间】:2019-12-08 06:45:27
【问题描述】:

soup.find 方法返回 None 而不是产品标题,尽管页面中存在 productTitle。 它适用于 amazon.it 但不适用于 amazon.com

import requests
from bs4 import BeautifulSoup
url = r'https://www.amazon.com/SanDisk-128GB-Extreme-microSD-Adapter/dp/B07FCMKK5X/ref=sr_1_1?fst=as:off&pf_rd_i=16225007011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=74069509-93ef-4a3c-8dca-a9e3fa773a64&pf_rd_r=HWWSV1CX6VJBC57MRVP6&pf_rd_s=merchandised-search-4&pf_rd_t=101&qid=1564513802&rnid=16225007011&s=computers-intl-ship&sr=1-1'

    headers = {'User-Agent' : r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }
    page = requests.get(url, headers=headers)
    soup = BeautifulSoup(page.content, 'html.parser')
    fullprice = soup.find(id='productTitle')
    print(fullprice)

【问题讨论】:

  • amazon.com 可能会使用 JavaScript 添加一些元素,但 BS 不运行 JavaScript。您可能需要Selenium 来控制可以运行 JavaScript 的真实网络浏览器
  • 页面有一处不同。您使用inspect element 看到的页面与python requests 返回的页面不同。 Python requests response 相当于浏览器的view-source。这意味着它将包含从网络服务器发送给用户的initial page
  • 您应该检查page.content 中的内容 - 您会看到没有预期的数据。

标签: python html web-scraping beautifulsoup tags


【解决方案1】:

看来你只需要 User-Agent 标头

import requests
from bs4 import BeautifulSoup as bs

headers = {'user-agent': 'Mozilla/5.0'}
r = requests.get('https://www.amazon.com/SanDisk-128GB-Extreme-microSD-Adapter/dp/B07FCMKK5X/ref=sr_1_1?fst=as:off&pf_rd_i=16225007011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=74069509-93ef-4a3c-8dca-a9e3fa773a64&pf_rd_r=HWWSV1CX6VJBC57MRVP6&pf_rd_s=merchandised-search-4&pf_rd_t=101&qid=1564513802&rnid=16225007011&s=computers-intl-ship&sr=1-1', headers = headers)
soup = bs(r.content, 'html.parser')
print(soup.select_one('[name="description"]')['content'])

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 2013-07-15
    • 2016-12-02
    • 2018-07-27
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多