Python 刮痧爬虫把我难住了
我写了一本书,里面有一些刮痒的爬虫。这件事把我难住了。 我正在清理水龙头公司的网站。布局非常简单。列表页。列表页面上的缩略图将带您进入详细信息页面。我会为每一行项目下载一堆信息。我正在努力获取下一页的URL。我做过几次。我遇到的问题是,我的爬虫程序无法在a标记的超链接上找到属性href。它可以找到其他属性,如“数据绑定”,但不能找到href,就在那里。看起来很直截了当&因此让我更加沮丧 在下面的代码中,爬虫将amazon列表打印为:Python 刮痧爬虫把我难住了,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我写了一本书,里面有一些刮痒的爬虫。这件事把我难住了。 我正在清理水龙头公司的网站。布局非常简单。列表页。列表页面上的缩略图将带您进入详细信息页面。我会为每一行项目下载一堆信息。我正在努力获取下一页的URL。我做过几次。我遇到的问题是,我的爬虫程序无法在a标记的超链接上找到属性href。它可以找到其他属性,如“数据绑定”,但不能找到href,就在那里。看起来很直截了当&因此让我更加沮丧 在下面的代码中,爬虫将amazon列表打印为: [<Selector xpath='//div[@id=
[<Selector xpath='//div[@id="product-list"]//div[@id="displayedProducts"]//div[@data-bind="attr: { id: \'prd\' + ModelName().replace(\'-\', \'\'), \'data-sortorder\': SortOrder, \'class\': \'product \' + ModelName().replace(\'-\', \'\') }"]//div[@class="finishes"]//div[@data-bind="attr: { \'class\': \'finishSwatch \' + FacetCode() }"]' data=u'<div data-bind="attr: { \'class\': \'finish'>]
[因为有AJAX项加载/scrapy不会执行js…但无论如何,使用普通请求(而不是xpath)获取它们非常容易-浏览浏览器网络面板中的XHR请求谢谢你的提示madzohan。你能给我指一下任何使用XHR的scrapy教程吗?从未处理过XHR请求,或者如果你能建议修改代码让我开始,我会非常感激。因为有AJAX项加载/scrapy不执行js…bu无论如何,使用普通请求(而不是xpath)获取它们非常容易-在浏览器网络面板中查看XHR请求谢谢你的提示madzohan。你能给我指一下scrapy中使用XHR的任何教程吗?我开始学习。从未处理过XHR请求,或者如果你能建议修改代码,我会非常感激。
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from homedepot.items import LowesItem
from homedepot.items import SwatchcolorItem
class SattySpider(scrapy.Spider):
name = "satty-pfister"
allowed_domains = ["pfisterfaucets.com"]
start_urls = [
"http://www.pfisterfaucets.com/kitchen/category/kitchen-faucets"
]
rules = (
Rule(LinkExtractor(allow='pfisterfaucets\.com/[A-Z][a-zA-Z_/]+$'),
'parse_category', follow=True,
),
)
def parse(self, response):
print 'enterrrrrrrrrrrrr'
#amazonlist = response.xpath('//ul[@id="products"]//li[@class="grid_3 "]//div//a[@class="preview_image js_product-link"]')
amazonlist = response.xpath('//div[@id="product-list"]//div[@id="displayedProducts"]//div[@data-bind="attr: { id: \'prd\' + ModelName().replace(\'-\', \'\'), \'data-sortorder\': SortOrder, \'class\': \'product \' + ModelName().replace(\'-\', \'\') }"]//div[@class="finishes"]//div[@data-bind="attr: { \'class\': \'finishSwatch \' + FacetCode() }"]')
print amazonlist
pages = amazonlist.xpath('.//a//@href').extract()
print 'pages'
print pages
#imglarges = amazonlist.xpath('.//@srcset').extract()
imgs = amazonlist.xpath('.//img//@src').extract()
for idx1,page in enumerate(pages):
print page
url_next = response.urljoin(pages[idx1])
print url_next
yield scrapy.Request(url_next,callback=self.parse_productdetail)
for next_url in response.xpath('//div[@class="float-right pagination-pages"]//div//a'):
urls= next_url.xpath('.//@href').extract()
for idx1,url in enumerate(urls):
url_next = response.urljoin(urls[idx1])
print url_next
yield scrapy.Request(url_next, callback=self.parse)
def parse_productdetail(self, response):
tits='blank'
#<div class="tabs-navigation group long">
#//div[contains(@class, "tabs-navigation")]
for imgs in response.xpath('//div[contains(@class, "tabs-navigation")]//ul[@class="tabs"]//li//img') :
imgurl= imgs.xpath('.//@href').extract()
name = imgs.xpath('.//@alt').extract()
print 'imggggggggggggggggggggggggggggg'
print imgurl
lowesitem = LowesItem(prod=name, file_urls=[imgurl])
yield lowesitem