Scrapy 爬虫不适用于我得到部分结果的网站
Scrapy crawler doesnt work with a website i get partial results
我是 Scrapy 的新手 Python。我一直在努力从 2 个网站中提取数据,如果我直接使用 python,它们会非常有效。我调查过,我想抓取这些网站:
- homedepot.com.mx/comprar/es/miguel-aleman/home(完美运行)
- vallenproveedora.com.mx/(无效)
谁能告诉我如何使第二个 link 工作?
我看到这条消息:
DEBUG: Crawled (200) allenproveedora.com.mx/> (referer: None) ['partial']
但我找不到解决方法。
如有任何帮助和支持,我将不胜感激。这是代码和日志:
items.py
from scrapy.item import Item, Field
class CraigslistSampleItem(Item):
title = Field()
link = Field()
Test.py(蜘蛛文件夹)
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem
class MySpider(BaseSpider):
name = "craig"
allowed_domains = ["vallenproveedora.com.mx"]
#start_urls = ["http://www.homedepot.com.mx/webapp/wcs/stores/servlet/SearchDisplay?searchTermScope=&filterTerm=&orderBy=&maxPrice=&showResultsPage=true&langId=-5&beginIndex=0&sType=SimpleSearch&pageSize=&manufacturer=&resultCatEntryType=2&catalogId=10052&pageView=table&minPrice=&urlLangId=-5&storeId=13344&searchTerm=guante"]
start_urls = ["http://www.vallenproveedora.com.mx/"]
def parse(self, response):
titles = response.xpath('//ul/li')
for titles in titles:
title = titles.select("a/text()").extract()
link = titles.select("a/@href").extract()
print (title, link)
您在日志中看到 ['partial']
,因为 vallenproveedora.com.mx 的服务器没有在其响应中设置 Content-Length header; 运行 curl -I
自己看看。有关 partial
标志的原因的更多详细信息,请参阅 my answer here.
不过,您实际上不必为此担心。响应 body 就在那里,Scrapy 会解析它。您真正遇到的问题是 XPath //ul/li/a
没有选择任何元素。您应该查看页面源代码并相应地修改您的选择器。我建议为每个站点编写一个特定的蜘蛛,因为站点通常需要不同的选择器。
我是 Scrapy 的新手 Python。我一直在努力从 2 个网站中提取数据,如果我直接使用 python,它们会非常有效。我调查过,我想抓取这些网站:
- homedepot.com.mx/comprar/es/miguel-aleman/home(完美运行)
- vallenproveedora.com.mx/(无效)
谁能告诉我如何使第二个 link 工作?
我看到这条消息:
DEBUG: Crawled (200) allenproveedora.com.mx/> (referer: None) ['partial']
但我找不到解决方法。
如有任何帮助和支持,我将不胜感激。这是代码和日志:
items.py
from scrapy.item import Item, Field
class CraigslistSampleItem(Item):
title = Field()
link = Field()
Test.py(蜘蛛文件夹)
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem
class MySpider(BaseSpider):
name = "craig"
allowed_domains = ["vallenproveedora.com.mx"]
#start_urls = ["http://www.homedepot.com.mx/webapp/wcs/stores/servlet/SearchDisplay?searchTermScope=&filterTerm=&orderBy=&maxPrice=&showResultsPage=true&langId=-5&beginIndex=0&sType=SimpleSearch&pageSize=&manufacturer=&resultCatEntryType=2&catalogId=10052&pageView=table&minPrice=&urlLangId=-5&storeId=13344&searchTerm=guante"]
start_urls = ["http://www.vallenproveedora.com.mx/"]
def parse(self, response):
titles = response.xpath('//ul/li')
for titles in titles:
title = titles.select("a/text()").extract()
link = titles.select("a/@href").extract()
print (title, link)
您在日志中看到 ['partial']
,因为 vallenproveedora.com.mx 的服务器没有在其响应中设置 Content-Length header; 运行 curl -I
自己看看。有关 partial
标志的原因的更多详细信息,请参阅 my answer here.
不过,您实际上不必为此担心。响应 body 就在那里,Scrapy 会解析它。您真正遇到的问题是 XPath //ul/li/a
没有选择任何元素。您应该查看页面源代码并相应地修改您的选择器。我建议为每个站点编写一个特定的蜘蛛,因为站点通常需要不同的选择器。