我试图从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
答案 0 :(得分:0)
您是否注意到您要抓取的数据是否由javascript
生成?
执行以下测试:右键单击浏览器上的数据,然后单击inspect元素。然后做"显示页面来源"并按ctrl + f查找您要查找的数据。如果您在检查时可以找到它,但在页面来源上找不到,则javascript
可能会调用它。
如果是这种情况,我建议您使用selenium
和scrapy
。互联网上有很多例子,它是一个浏览器驱动程序,是获取这类数据的最简单方法。您可以使用selenium
+ PhantomJS
来使用无头浏览器。