Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Beautifulsoup奇怪的结果_Python_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

Python Beautifulsoup奇怪的结果

Python Beautifulsoup奇怪的结果,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我试图在亚马逊搜索中找到所有产品的标题。 它是有效的,但结果只是返回了亚马逊的页眉和页脚链接 如果我检查亚马逊源代码中的元素,它看起来像是用锚包裹的标签。但是,在尝试刮取数据时,情况似乎并非如此 import requests import re from bs4 import BeautifulSoup def adverts_trade(max_pages): page = 1 while page <= max_pages: url = 'https

我试图在亚马逊搜索中找到所有产品的标题。 它是有效的,但结果只是返回了亚马逊的页眉和页脚链接

如果我检查亚马逊源代码中的元素,它看起来像是用锚包裹的标签。但是,在尝试刮取数据时,情况似乎并非如此

import requests
import re
from bs4 import BeautifulSoup

def adverts_trade(max_pages):
    page = 1
    while page <= max_pages:
        url = 'https://www.amazon.co.uk/s/ref=sr_pg_2?rh=n%3A560798%2Cn%3A560834%2Ck%3Acanon+lenses&page=' + str(page) + '&keywords=canon+lenses&ie=UTF8'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for link in soup.findAll('a'):
            #href = link.find('h2').get_text()
            print(link)
        page += 1

adverts_trade(10)

亚马逊不喜欢你从他们那里抓取数据。如果将此行添加到代码中:

print(plain_text)
您将看到以下内容:

>     <!--
>             To discuss automated access to Amazon data please contact api-services-support@amazon.com.
>             For information about migrating to our APIs refer to our Marketplace APIs at
> https://developer.amazonservices.co.uk/ref=rm_5_sv, or our Product
> Advertising API at
> https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html/ref=rm_5_ac
> for advertising use cases.
>     -->

不要期望大多数站点能够简单地使用请求和bs4来刮取数据。要么使用他们的API,要么考虑硒或其他可以驱动实际浏览器的刮擦工具。

< P>你想从标签的标题属性中获取标题吗?或者您正在尝试从标记的H2子级获取标题


如果您选择第一种方式,请尝试打印链接['title'],而不是打印整个标签。在beautifulSoup中,您可以像普通字典一样访问被捕获的锚的属性。

我很惊讶,没有比seleniumAmazon更简单的解决方法了。seleniumAmazon花费大量资金获取高质量的图像、产品属性,并实时动态调整价格。他们需要让竞争对手尽可能难以获取这些数据。几乎所有主要的电子商务网站都会尽其所能防止刮擦。