这一节,我们讲一讲Spider参数问题。
Spider支持接受一些参数去改变他的执行行为,这里借用官方的例子说明下,看下面的代码。
import scrapy
class MySpider(scrapy.Spider):
name = "myspider"
def __init__(self, category=None, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.start_urls = [f"http://www.example.com/categories/{category}"]
# ...
代码中有个strat_urls,这个都是这是获取第一个爬取网址的地方,但是注意,这个网址和之前的不一样,后面有个{category}
,熟悉Python一看就知道了,这个是用来在字符串中自动匹配变量的,也就是说category是一个变量,用{}
括起来后,就是可以在字符串中自动使用变量,比如我的’category=electronics’,那我最终的url就是http://www.example.com/categories/electronics
。然后我们在命令行执行下面的语句。
scrapy crawl myspider -a category=electronics
那么我们爬取的第一个网址就是http://www.example.com/categories/electronics
了。那个-a
不要丢,spider的crawl命令通过-a选项来传输参数。
还有一个有效的用例是设置 HttpAuthMiddleware 使用的 http 身份验证凭据或 UserAgentMiddleware 使用的用户代理:
scrapy crawl myspider -a http_user=myuser -a http_pass=mypassword -a user_agent=mybot
一般我们做爬虫时,很少这样用,所以大家知道这个即可,如果做一些小型爬虫的话,可以考虑这样使用。