自包含python文件中的网络爬虫

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)

pad*_*pad 3

您可以将 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