这是我的第一个刮scrap项目,目的是刮this此页面“ http://books.toscrape.com/”。
页面包含书籍的多个链接。
想法是刮掉书的标题。
这里是代码:
import scrapy
class SpiderSpider(scrapy.Spider):
name = 'spider'
allowed_domains = ['http://books.toscrape.com/']
start_urls = ['http://http://books.toscrape.com//']
def parse(self, response):
all_books = response.xpath('//article')
for book in all_books:
title = book.xpath('.//h3/a/@title').extract()
print(title)
SpiderSpider().parse()
这里是错误:
Traceback (most recent call last):
File "C:/Users/Sayed/PycharmProjects/books/books/spiders/spider.py", line 17, in <module>
SpiderSpider().parse()
TypeError: parse() missing 1 required positional argument: 'response
我发现您的代码中有两个错误:
__init__
类中的scrappy.Spider
功能SpiderSpider().parse
,执行此操作的方法是运行:$ scrapy crawl [yourSpiderName]
对于这种情况:
$ scrapy crawl spider
执行此操作时,请确保您与scrapy.cfg
文件位于相同的文件夹路径。
首先,您的蜘蛛代码的正确方法是:
import scrapy
class SpiderSpider(scrapy.Spider):
name = 'spider'
def __init__(self, *args, **kwargs):
super(SpiderSpider,self).__init__(*args, **kwargs)
self.allowed_domains = ['http://books.toscrape.com/']
self.start_urls = ['http://http://books.toscrape.com//']
def parse(self, response):
all_books = response.xpath('//article')
for book in all_books:
title = book.xpath('.//h3/a/@title').extract()
print(title)
希望这一点指向正确的方向。另外,我不知道您是如何创建这个scrapy项目的,但是scrapy已经随您的项目一起提供了模板,从而使开发快速可靠的解决方案变得更加容易。要创建项目模板,请使用:
$ scrapy startproject [NameOfYourProject]
要生成新的蜘蛛,请执行以下操作:
$ cd [NameOfYourProject]
$ scrapy genspider [yourSpiderName]
请随时询问您是否有任何疑问! :D
您使用以下命令执行脚本:
scrapy runspider <script_name>.py
(当然,您删除了最后一个您自己叫parse
的行之后]