我的意图是使用一个spider抓取几个url,如下所示:
import scrapy
from ..items import ContentsPageSFBItem
class BasicSpider(scrapy.Spider):
name = "contentspage_sfb"
#allowed_domains = ["web"]
start_urls = [
'https://www.safaribooksonline.com/library/view/shell-programming-in/9780134496696/',
'https://www.safaribooksonline.com/library/view/cisa-certified-information/9780134677453/'
]
def parse(self, response):
item = ContentsPageSFBItem()
#from scrapy.shell import inspect_response
#inspect_response(response, self)
content_items = response.xpath('//ol[@class="detail-toc"]//a/text()').extract()
for content_item in content_items:
item['content_item'] = content_item
item["full_url"] = response.url
item['title'] = response.xpath('//title[1]/text()').extract()
yield item
我打算使用更多的网址。我的意图是创建一个可重启的spider,以防出现问题。我的计划是添加例外并创建一个csv,其中包含剩余url的列表。我到底可以在哪里添加此功能?你知道吗
您可以存储发生此类问题的当前url,然后使用相同的
parse
函数将其传递到scrapy.Request
中继续。你知道吗你可以看到,如果有什么东西被打印在网站上被访问使用
response.body
,是一些坏的事情发生了然后yield
一个新的scrapy.Request
如果不是那么继续正常。你知道吗也许:
请注意,再次使用
parse
函数的方式在很大程度上取决于要捕获的“异常”。你知道吗请记住,您希望将数据写入不同的文件,这取决于您的url,然后我对代码进行了一些调整:
首先创建三个全局变量来存储第一个和第二个url,并将字段作为数组。注意,这对这两个URL很有用,但如果它们开始增长,这将很困难:
然后在
parse
函数中获取数据并将其存储在fields
数组中,该数组将被传递给第二个函数parse_and_write_csv
,以根据当前的url创建和写入每个文件。你知道吗parse_and_write_csv
获取字段,根据url,它从url创建的数组中获取第5个元素,并创建csv文件,如果它已经存在,则打开它。你知道吗希望有帮助。你可以在这里看到gist。你知道吗
相关问题 更多 >
编程相关推荐