【问题标题】:A web crawler in a self-contained python file自包含 python 文件中的网络爬虫
【发布时间】:2015-02-28 19:22:52
【问题描述】:

我发现很多Scrapy 教程(例如this good tutorial)都需要下面列出的步骤。结果是一个项目,包含大量文件(project.cfg + 一些 .py 文件 + 特定文件夹结构)。

如何使这些步骤(如下所列)作为一个独立的 python 文件运行,可以使用 python mycrawler.py 运行?

(而不是一个包含大量文件、一些 .cfg 文件等的完整项目,并且必须使用 scrapy crawl myproject -o myproject.json... 顺便说一句,scrapy 似乎是一个新的 shell 命令? 这是真的吗?)

注意:here could be an answer to this question 但不幸的是,它已被弃用且不再有效。


1) 使用scrapy startproject myproject创建一个新的scrapy项目

2) 像这样用Item 定义数据结构:

from scrapy.item import Item, Field
    class MyItem(Item):
        title = Field() 
        link = Field()
        ...

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)
        ...

4) 运行:

scrapy crawl myproject -o myproject.json

【问题讨论】:

  • 如何使步骤(如下所列)作为一个独立的 python 文件工作,可以使用 python mycrawler.py 运行?你能简单解释一下这个说法吗..
  • @vikasdumca 事实上,这些教程 (amaral-lab.org/blog/…) 没有展示如何制作可在一个脚本中运行的代码。我希望能够在一个文件 testcrawler.py 中执行 amaral-lab.org/blog/… 并能够使用 python testcrawler.py 运行它,而不必运行 scrapy ...

标签: python web-scraping scrapy web-crawler


【解决方案1】:

您可以使用 runspider 在不启动项目的情况下将 scrapy 蜘蛛作为单个脚本运行 这是你想要的吗?

#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  

现在您可以使用 scrapy runspider myscript.py -o out.json 运行它

【讨论】:

  • 谢谢@pad。我希望能够使用python myscript.py 运行它。我需要添加什么才能像这样运行它?
  • @Basj 看很全面的回答by alecxe
【解决方案2】:

Scrapy 不是 unix 命令,它只是可执行文件,如 python、javac、gcc 等。
bcz 你正在为此使用框架,你必须使用提供的命令 框架。 您可以做的一件事是创建一个 bash 脚本并在需要时简单地执行或从其他程序程序执行它。

你可以用简单的 urllib3 编写爬虫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2013-10-15
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多