首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊网络抓取

亚马逊网络抓取
EN

Stack Overflow用户
提问于 2015-03-31 21:59:10
回答 3查看 2.5K关注 0票数 2

我试着用幻影和蟒蛇来刮亚马逊的价格。我想用漂亮的汤来解析它,为了得到新的和用过的书的价格,问题是:当我通过我用幻影做的请求的来源时,价格只是0,00,代码就是这个简单的测试。

我在网络抓取方面是新手,但我不明白亚马逊是谁有措施避免刮价格,还是我做错了,因为我在尝试其他更简单的网页,我可以得到我想要的数据。

PD我在一个不支持使用amazon的国家,这就是为什么刮刀是必要的

代码语言:javascript
复制
import re
import urlparse

from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep

link = 'http://www.amazon.com/gp/offer-listing/1119998956/ref=dp_olp_new?ie=UTF8&condition=new'#'http://www.amazon.com/gp/product/1119998956'

class AmzonScraper(object):
    def __init__(self):
        self.driver = webdriver.PhantomJS()
        self.driver.set_window_size(1120, 550)

    def scrape_prices(self):
        self.driver.get(link)
        s = BeautifulSoup(self.driver.page_source)
        return s

    def scrape(self):
        source = self.scrape_prices()
        print source
        self.driver.quit()

if __name__ == '__main__':
    scraper = TaleoJobScraper()
    scraper.scrape()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-31 22:19:54

首先,遵循@Nick的评论,研究使用条款,并确保您这边没有违规行为。

要解决这个问题,您需要调整PhantomJS所需的功能。

代码语言:javascript
复制
caps = webdriver.DesiredCapabilities.PHANTOMJS
caps["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87"

self.driver = webdriver.PhantomJS(desired_capabilities=caps)
self.driver.maximize_window()

而且,为了防弹,你可以做一个自定义 期望条件,等待价格变成非零。

代码语言:javascript
复制
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class wait_for_price(object):
    def __init__(self, locator):
        self.locator = locator

    def __call__(self, driver):
        try :
            element_text = EC._find_element(driver, self.locator).text.strip()
            return element_text != "0,00"
        except StaleElementReferenceException:
            return False

用法:

代码语言:javascript
复制
def scrape_prices(self):
    self.driver.get(link)

    WebDriverWait(self.driver, 200).until(wait_for_price((By.CLASS_NAME, "olpOfferPrice")))
    s = BeautifulSoup(self.driver.page_source)

    return s
票数 4
EN

Stack Overflow用户

发布于 2016-03-06 23:29:59

关于将幻影的用户代理设置为普通浏览器的好答案。既然你说你的国家被亚马逊封锁了,那么我可以想象你也需要设置一个代理。

下面是如何使用firefox用户代理和代理在python中启动phantomJS的示例。

代码语言:javascript
复制
from selenium.webdriver import *
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
service_args = [ '--proxy=1.1.1.1:port', '--proxy-auth=username:pass'  ]
dcap = dict( DesiredCapabilities.PHANTOMJS )
dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0"
driver = PhantomJS( desired_capabilities = dcap, service_args=service_args )

其中1.1.1.1是代理ip,端口是代理端口。另外,只有当代理需要身份验证时,用户名和密码才是必需的。

票数 2
EN

Stack Overflow用户

发布于 2020-04-27 19:22:43

另一个要尝试的框架是刮痕 --它比selenium更简单,selenium用于模拟浏览器交互。Scrapy为您提供了使用CSS selectorsXPath轻松解析数据的类,并提供了一个管道来以您想要的任何格式存储数据,例如将其写入MongoDB数据库

通常情况下,您可以编写一个完全构建的蜘蛛,并将它部署到中的Scrapy云中,在10行代码中进行部署。

查看这段关于如何使用Scrapy作为搜索亚马逊的评论用例的YT视频

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29379332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档