我正在尝试使用Scrapy构建一个爬虫。 Scrapy的官方文档或博客中的每个教程,我看到人们在.py代码中创建一个类并通过scrapy shell执行它。
在他们的主页上,给出了以下示例
import scrapy
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://blog.scrapinghub.com']
def parse(self, response):
for title in response.css('h2.entry-title'):
yield {'title': title.css('a ::text').extract_first()}
for next_page in response.css('div.prev-post > a'):
yield response.follow(next_page, self.parse)
然后使用
运行代码scrapy runspider myspider.py
我无法找到以可以用
之类的方式编写相同代码的方法python myspider.py
我还查看了他们网站的Requests and response部分,了解如何在shell中处理请求和响应,但尝试在python shell中运行这些代码
(>> python myspider.py
)
没有显示任何内容。任何有关如何转换代码以使其耗尽scrapy shell的指导,或指向任何详细说明的文档的指针都将受到赞赏。
修改 请不要过分夸大您的匿名优势。如果你有一个有效的downvote点,请在你投票后在评论中提出你的观点。
答案 0 :(得分:3)
您可以使用CrawlerProcess在Python主脚本中运行您的蜘蛛,并使用python myspider.py
例如:
import scrapy
from scrapy.crawler import CrawlerProcess
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://blog.scrapinghub.com']
def parse(self, response):
for title in response.css('h2.entry-title'):
yield {'title': title.css('a ::text').extract_first()}
for next_page in response.css('div.prev-post > a'):
yield response.follow(next_page, self.parse)
if __name__ == '__main__':
class MySpider(scrapy.Spider):
# Your spider definition
...
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(BlogSpider)
process.start()
有用的链接 https://doc.scrapy.org/en/latest/topics/practices.html