scrapy请求在浏览器中不起作用

时间:2015-08-04 17:04:30

标签: python web-crawler scrapy scrapy-spider

我试图从foodie.fi抓取数据。

为了能够抓取每个区域的数据,我应该选择区域并按产品名称进行搜索。

当我从浏览器中选择区域时,它会发出请求并返回json作为200状态的响应。

但是当我尝试从scrapy发出相同的请求时,它会将我重定向到错误的页面(状态302)。

以下是我的scrapy代码:

第一个请求是列出区域。

第二个请求是选择区域(这个错误)。

第三个请求是从选定区域的搜索产品结果中抓取数据。

from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from foodie.items import FOODIEItem

class FOODIESpider(Spider):
        name="foodie"
        allowed_domains = []



    def start_requests(self):
            yield Request(
                url="https://www.foodie.fi/store/list/region/Osuuskauppa%20Pee%C3%84ss%C3%A4",
                callback=self.select_store
                 )

        # Page parser
    def select_store(self, response):
                yield Request(
                    url="https://www.foodie.fi/store/select_store/41e9b2cb4ad9d81cc9ad5a640d78ed8f", 
                    callback=self.make_search
                )




    def make_search(self, response):
                yield Request(
                    url="https://www.foodie.fi/products/search/leip%C3%A4", 
                    callback=self.data_reader
                  )



    def data_reader(self, response):
        hxs = Selector(response)
        rows  = hxs.xpath("//*@id='page']/div/div[2]/div[2]/div/div[3]/div[1]/ul/li")
        items = []
        for row in rows:
          name = row.xpath("./div[3]/div[1]/text()").extract()
          print name

1 个答案:

答案 0 :(得分:0)

您是否注意到您要抓取的数据是否由javascript生成?

执行以下测试:右键单击浏览器上的数据,然后单击inspect元素。然后做"显示页面来源"并按ctrl + f查找您要查找的数据。如果您在检查时可以找到它,但在页面来源上找不到,则javascript可能会调用它。

如果是这种情况,我建议您使用seleniumscrapy。互联网上有很多例子,它是一个浏览器驱动程序,是获取这类数据的最简单方法。您可以使用selenium + PhantomJS来使用无头浏览器。