我有一个我想要抓取的网址列表并遵循所有相同的管道。我该如何开始呢?我真的不确定从哪里开始。
主要想法是我的抓取工作通过网站和网页。然后它产生解析页面并更新数据库。我现在想要实现的是现在解析数据库中当天未被抓取的所有现有网址的页面。
我尝试使用close_spider
方法在管道中执行此操作,但无法将这些网址提供给请求/解析。在我屈服时,不再调用整个close_spider
方法。
def close_spider(self, spider):
for item in models.Items.select().where(models.Items.last_scraped_ts < '2016-02-06 10:00:00'):
print item.url
yield Request(item.url, callback=spider.parse_product, dont_filter=True)
答案 0 :(得分:1)
(重读你的帖子,我不确定我回答你的问题......) 我做了类似的事情没有scrapy但模块lxml和请求 网址:
listeofurl = [&#39; URL1&#39;&#39; URL2&#39;]
或者如果Url有一个模式生成它们:
for i in range(0,10):
url=urlpattern+str(i)
然后我做了一个解析每个具有相同模式的url的循环: 导入json 来自lxml import html 导入请求
listeOfurl=['url1','url2']
mydataliste={};
for url in listeOfurl:
page = requests.get(url)
tree = html.fromstring(page.content)
DataYouWantToKeep= tree.xpath('//*[@id="content"]/div/h2/text()[2]')
data[url]=DataYouWantToKeep
#and at the end you save all the data in Json
with open(filejson, 'w') as outfile:
json.dump(data, outfile)
答案 1 :(得分:0)
您可以简单地将网址复制并粘贴到start_urls中,如果您没有覆盖start_requests,则解析将是默认回调。如果它是一个很长的列表并且你不想要丑陋的代码,你可以只覆盖start_requests,打开你的文件或进行db调用,并且对于yield中的每个项目,请求该url和callback进行解析。这将允许您使用您的解析函数和管道,以及通过scrapy处理并发。如果您只有一个没有额外基础设施的列表而且列表不长,那么Sulot的答案就更容易了。