Bas*_*asj 5 python web-crawler scrapy web-scraping
我发现很多Scrapy教程(例如本教程)都需要下面列出的步骤。结果是一个项目,其中包含许多文件(project.cfg+一些.py文件+一个特定的文件夹结构)。
如何使这些步骤(如下所列)作为可与之一起运行的独立python文件工作 python mycrawler.py?
(而不是一个包含大量文件,一些.cfg文件等并且必须使用scrapy crawl myproject -o myproject.json... 的完整项目,这似乎scrapy是一个新的shell命令?这是真的吗?)
注意:这里可能是这个问题的答案,但不幸的是,它已被弃用,不再起作用。
1)使用创建一个新的scrapy项目 scrapy startproject myproject
2)Item像这样定义数据结构:
from scrapy.item import Item, Field
class MyItem(Item):
title = Field()
link = Field()
...
Run Code Online (Sandbox Code Playgroud)
3)使用定义爬虫
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class MySpider(BaseSpider):
name = "myproject"
allowed_domains = ["example.com"]
start_urls = ["http://www.example.com"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
...
Run Code Online (Sandbox Code Playgroud)
4)运行:
scrapy crawl myproject -o myproject.json
Run Code Online (Sandbox Code Playgroud)
您可以将 scrapy 蜘蛛作为单个脚本运行,而无需启动项目,方法是使用runspider
“这就是您想要的吗?”
#myscript.py
from scrapy.item import Item, Field
from scrapy import Spider
class MyItem(Item):
title = Field()
link = Field()
class MySpider(Spider):
start_urls = ['http://www.example.com']
name = 'samplespider'
def parse(self, response):
item = MyItem()
item['title'] = response.xpath('//h1/text()').extract()
item['link'] = response.url
yield item
Run Code Online (Sandbox Code Playgroud)
现在你可以运行它scrapy runspider myscript.py -o out.json