python爬虫——scrapy的使用

进入目录里,创建个baidu的爬虫,并且限制抓取域名的范围 。注意要在的目录下输入以下命令
【python爬虫——scrapy的使用】scrapy genspider baidu "baidu.com"
看到命令已经帮我们自动创建了爬虫代码,打开文件看下 。
看下这里的代码,先导入,定义了一个类,必须要继承. 。这里注意,里面有3个必须的属性(name,,) 。
好的,既然都OK了,那我们去运行下,看看会发生什么 。
命令行下输入,注意这里的baidu就是爬虫的name属性 。
scrapy crawl baidu
嘎嘎嘎,,,一大堆信息,看的是不是有点懵,说实话,我也是 。这是正常信息,已经跑起来了 。这些参数,大家随意看一看吧,我先不解释了 。。。手动滑稽~~~哈哈哈,其实先不用看,一会我们在讲 。
代码改造下,按照我们的预期来
还记得刚才的parse函数么,不过命令创建的是啥事都没干 。自己定义下,让它做点事,也好知道代码是按照我们的预期去跑的 。
# -*- coding: utf-8 -*-import scrapyclass BaiduSpider(scrapy.Spider):name = 'baidu'allowed_domains = ['baidu.com']start_urls = ['http://baidu.com/']def parse(self, response):# 打印下response返回的状态码print(response.status)
在来运行下,还记得刚才的运行命令吗?不记得了? 。。。行,我在说一遍,
scrapy crawl baidu
好的,让我们看看会给什么信息 。嗯,,,有点问题,没有打印的状态码,看下日志,这里说的是爬虫碰到了.txt,给(禁止)了 。MD,百度竟然不给我爬,百度自己的都在爬其他网站的,,,
这里得解释下为什么禁止了,这其实就是个爬虫的哲学问题了,盗亦有道的道理,相信大家都听说过,爬虫也是,爬亦有道 。.txt也就是协议,这个文件会告诉爬虫,哪些能爬,哪些不能爬,爬虫要遵守这个规则 。毕竟是别人的网站嘛,,,
本文以教学为主,旨在教大家使用框架,合理使用爬虫,遵守互联网规则是每一位互联网人的责任 。
好的,问题该怎么解决?其实.txt也是可以解决的 。这个时候.py就派上用场了 。到我们之前的目录下,找到.py文件 。
打开看下,注意到 = True,这个就是遵守协议 。
改成False,不遵守协议 ~~~嘿嘿嘿,别笑,,,我只是教大家学框架而已
再来运行下 。看到这里就已经打印出来了,返回200,成功抓取百度 。
再来改造下
改造下parse函数,把抓取的数据保存到一个文件里 。毕竟之前的定义的parse动作是打印各种信息,都在看日志,脑袋都大了,这次直接点,看文件好吧 。
# -*- coding: utf-8 -*-import scrapyclass BaiduSpider(scrapy.Spider):name = 'baidu'allowed_domains = ['baidu.com']start_urls = ['http://baidu.com/']def parse(self, response):# 定义文件名 baidu.htmlfilename = 'baidu.html'with open(filename, 'wb') as f:f.write(response.body) #文件写入response的body信息
好的,运行下试试 。(PS:命令没忘吧,忘了的往上翻翻),这里注意我是在目录下运行的,baidu.html文件也会保存在当前目录下 。
看到了吧,文件出来了,直接双击打开看看,嗯,是百度首页 。
使用代理
准备工作,找个可靠的代理IP,剩下的跟着我的步骤走 。
修改中间件配置
这里就需要用到中间件了,找到文件.py,打开看看文件 。