我正在尝试使用Scrapy蜘蛛使用FormRequest
抓取网站,以便在特定于城市的网页上向搜索查询发送关键字。我读到的内容似乎很简单,但我遇到了麻烦。相当新的Python很抱歉,如果有一些明显我忽略的东西。
以下是我试图用来帮助我的主要3个网站: 鼠标与Python [1]; Stack Overflow; Scrapy.org [3]
从我抓取的特定网址的源代码:www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents
从我发现的特定页面的来源:
<input name="dnn$ctl01$txtSearch" type="text" maxlength="255" size="20" id="dnn_ctl01_txtSearch" class="NormalTextBox" autocomplete="off" placeholder="Search..." />
我认为搜索的名称是“dnn_ct101_txtSearch”,我将在我发现的2引用的示例中使用,我希望在车辆搜索中输入“toyota”作为我的关键字。
这是我现在的蜘蛛代码,我知道我在进口中输入了过多的东西:
import scrapy
from scrapy.http import FormRequest
from scrapy.item import Item, Field
from scrapy.http import FormRequest
from scrapy.spider import BaseSpider
class LkqSpider(scrapy.Spider):
name = "lkq"
allowed_domains = ["lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents"]
start_urls = ['http://www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents/']
def start_requests(self):
return [ FormRequest("www.lkqpickyourpart.com\locations/LKQ_Self_Service_-_Gainesville-224/recents",
formdata={'dnn$ctl01$txtSearch':'toyota'},
callback=self.parse) ]
def parsel(self):
print self.status
为什么不搜索或打印任何类型的结果,我复制的示例是仅用于登录未登录搜索栏的网站?
谢谢, 丹新手Python作家
答案 0 :(得分:3)
你走了:))
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import scrapy
from scrapy.shell import inspect_response
from scrapy.utils.response import open_in_browser
class Cars(scrapy.Item):
Make = scrapy.Field()
Model = scrapy.Field()
Year = scrapy.Field()
Entered_Yard = scrapy.Field()
Section = scrapy.Field()
Color = scrapy.Field()
class LkqSpider(scrapy.Spider):
name = "lkq"
allowed_domains = ["lkqpickyourpart.com"]
start_urls = (
'http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US',
)
def parse(self, response):
section_color = response.xpath(
'//div[@class="pypvi_notes"]/p/text()').extract()
info = response.xpath('//td["pypvi_make"]/text()').extract()
for element in range(0, len(info), 4):
item = Cars()
item["Make"] = info[element]
item["Model"] = info[element + 1]
item["Year"] = info[element + 2]
item["Entered_Yard"] = info[element + 3]
item["Section"] = section_color.pop(
0).replace("Section:", "").strip()
item["Color"] = section_color.pop(0).replace("Color:", "").strip()
yield item
# open_in_browser(response)
# inspect_response(response, self)
您尝试抓取的页面由AJAX
电话生成。
默认情况下,Scrapy不会加载任何动态加载的Javascript内容,包括AJAX。几乎所有在向下滚动页面时动态加载数据的站点都是使用AJAX完成的。
使用Chrome Dev Tools或Firebug for Firefox,^ ^ Trapping ^^ AJAX调用非常简单。
您所要做的就是观察Chrome开发工具或Firebug中的XHR
个请求。 XHR
是一个AJAX请求。
以下是屏幕截图:
找到链接后,您可以更改其属性。
这是Chrome开发工具中的XHR
请求给我的链接:
http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=toyota&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US
我已将页面大小更改为1000,每页给我1000个结果。默认值为15。 那里还有一个页码,你可以理想地增加页码,直到你捕获所有数据。
答案 1 :(得分:0)