【问题标题】:Always getting result as None while web scraping using bs4使用 bs4 进行网页抓取时始终将结果设为 None
【发布时间】:2020-12-17 23:48:55
【问题描述】:

我是 python 新手。我刚开始学习网络抓取,我决定为列出的产品名称做网络抓取亚马逊。所以我启动了 chrome 开发工具并单击亚马逊产品名称上的检查,然后记下该类,在这种情况下,该类的名称是“a-link-normal”。问题是我得到的结果为无。 这是代码-

import webbrowser
import requests
from bs4 import BeautifulSoup

source = requests.get('https://www.amazon.in/s?k=books&ref=nb_sb_noss')
soup = BeautifulSoup(source.text, 'lxml')

name = soup.find('a', class_ = 'a-link-normal')
print(name)

这是我正在检查的屏幕截图 -

我是网络抓取的新手,对网站的复杂性感到不知所措,所以如果您愿意,请提供任何建议

任何帮助表示赞赏 谢谢

【问题讨论】:

  • 如果你使用class_ = 'a-link-normal a-text-normal'会怎样
  • @rioV8 还是 None
  • 内容是页面加载的,还是页面加载后通过ajax加载的?据我所知,bs 无法处理动态数据。如果我不得不猜测,亚马逊会在页面加载后加载其内容,因此您无法直接阅读,但我可能错了。

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

亚马逊似乎阻止了任何抓取,我检查了一下,当您第一次运行代码时,可以提取内容。每当代码第二次立即运行时,它都会被阻塞。如果您打印出 soup 变量,您将面临以下通知:

要讨论对亚马逊数据的自动访问,请联系 api-services-support@amazon.com。有关迁移到我们 API 的信息,请参阅我们的 Marketplace API(https://developer.amazonservices.in/ref=rm_c_sv)或我们的产品广告 API(https://affiliate-program.amazon.in/gp/advertising/api/detai/main.html/ref=rm_c_ac)以了解广告用例。

抱歉,我们只需要确保您不是机器人即可。为获得最佳效果,请确保您的浏览器接受 cookie。

我建议您使用 Selenium Library,而不是考虑代码中的一些延迟以像人类交互一样。

但是,尝试在几分钟后运行下面的代码,可以提取书名:

import requests
from bs4 import BeautifulSoup

source = requests.get('https://www.amazon.in/s?k=books&ref=nb_sb_noss')
soup = BeautifulSoup(source.content, 'html.parser')
#print(soup)

names = soup.find_all('span', class_="a-size-medium a-color-base a-text-normal")
for name in names:
    print(name.text)

【讨论】:

  • 谢谢,我试过你说的,它给了我一个空集。不知道为什么
  • 就像我提到的,它似乎被阻止了。也许,selenium 可以帮助您获取数据。
  • 当然,我可以用 selenium 打开一个标签并在亚马逊上搜索,但是有什么方法可以让 selenium 在后台运行。没有它实际打开浏览器??
  • 可以在最小化(minimize())模式下运行浏览器,然后在进程完成后关闭它。
【解决方案2】:

要从亚马逊服务器获得正确的响应,请使用User-Agent HTTP 标头:

import requests
from bs4 import BeautifulSoup


headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0'}
source = requests.get('https://www.amazon.in/s?k=books&ref=nb_sb_noss', headers=headers)
soup = BeautifulSoup(source.text, 'lxml')

for a in soup.select('a.a-link-normal > span.a-size-medium'):
    print(a.get_text(strip=True))

打印:

The Power of Your Subconscious Mind (DELUXE HARDBOUND EDITION)
World’s Greatest Books For Personal Growth & Wealth (Set of 4 Books): Perfect Motivational Gift Set
Ikigai: The Japanese secret to a long and happy life
Attitude Is Everything: Change Your Attitude ... Change Your Life!
World’s Greatest Books For Personal Growth & Wealth (Set of 4 Books): Perfect Motivational Gift Set
The Theory of Everything
The Subtle Art of Not Giving a F*ck
The Alchemist
The Monk Who Sold His Ferrari
The Rudest Book Ever
As a Man Thinketh
How to Stop Worrying and Start Living: Time-Tested Methods for Conquering Worry
Help Hungry Henry Deal with Anger : An Interactive Picture Book About Anger Management
The Girl in Room 105
The Blue Umbrella
Wings of Fire: An Autobiography of Abdul Kalam
My First Library: Boxset of 10 Board Books for Kids
Who Will Cry When You Die?
Rich Dad Poor Dad : What The Rich Teach Their Kids About Money That the Poor and Middle Class Do Not!
Rough Book
The Leader Who Had No Title
The Power Of Influence

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多