我正在编写一个scrapy应用程序,它抓取网站主页,保存他的网址,并检查他的菜单项,因此它将递归地执行相同的过程。
class NeatSpider(scrapy.Spider):
name = "example"
start_urls = ['https://example.com/main/']
def parse(self, response):
url = response.url
yield url
# check for in-menu article links
menu_items = response.css(MENU_BAR_LINK_ITEM).extract()
if menu_items is not None:
for menu_item in menu_items:
yield scrapy.Request(response.urljoin(menu_item), callback=self.parse)
在示例网站中,每个菜单项都会指向另一个带有其他菜单项的页面。
有些网页的回复会转到“解析”方法,因此他们的网址会被保存,而有些则不会。 那些不是,给予200状态(当我在浏览器中手动输入他们的地址时),不抛出任何异常,并且几乎显示与其他页面相同的行为,他们确实得到了解析方法。 /强>
添加信息:所有菜单项都到达代码的最后一行(没有任何错误),如果我提供'errback'回调方法,则没有任何请求到达那里。
编辑:此处为日志:http://pastebin.com/2j5HMkqN
答案 0 :(得分:0)
您可能正在抓取显示Captchas的网站。
您可以像这样调试您的刮刀,这将在您的操作系统默认浏览器中打开已删除的网页。
from scrapy.utils.response import open_in_browser
def parse_details(self, response):
if "item name" not in response.body:
open_in_browser(response)