别人的爬虫在干啥

古人云博采众长,我们来看看其他人的爬虫是怎么学和用的:

 


爬虫文章 in 简书程序员专题:

  1. like:128 - Python 爬取落网音乐

使用Scrapy爬取上述列表

安装Scrapy

  • 下载文件:lxmltwisted;并在该页面上搜索scrapy并下载whl文件,最后使用pip install x.whlx为 whl文件名,依次安装三个文件。
  • 我下载的都是cp35-cp35m-win_amd64.whl,win7安装成功。

简单快速的Scrapy

  • 编辑名为num1.py的文件添加以下内容,使用命令行scrapy runspider num1.py -o 1.json在文件当前所在目录下运行文件,表示使用Scrapy执行该爬虫并将输出数据保存为json文件。
  • 整个爬取过程花费了212.98秒,平均每个页面花费0.053秒

 
 
  1. # -*- coding: utf-8 -*-
  2. # 文本编辑器编码要设置对,最好为UTF-8无BOM编码
  3. import scrapy
  4. class Num1Spider(scrapy.Spider):
  5. name = "num1" # 爬虫命名,在项目中有用
  6. allowed_domains = [ "jianshu.com"] # 允许爬取的域名
  7. domain = 'http://jianshu.com' # 自己设置的基础域名变量
  8. headers = {
  9. "User-Agent" :"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
  10. } # 请求头
  11. base_url = 'http://www.jianshu.com/collections/16/notes?order_by=added_at&page=%d'
  12. # 关于此处url,参看新手向爬虫(一)
  13. num = 0 # 页数
  14. def start_requests(self): # 默认的开始函数,用于提供要爬取的链接
  15. # url = self.base_url % self.num
  16. while self.num < 4000: # 程序员专题总页数小于4000,共花费212.975027秒
  17. self.num += 1
  18. yield scrapy.Request( self.base_url % self.num,
  19. headers = self.headers,
  20. callback = self.parse)
  21. def parse(self, response): # 默认的回调函数,用于链接下载完毕后调用来处理数据
  22. for index,i in enumerate(response.css( ".title a::text").extract()):
  23. if "爬虫" in i or "爬取" in i:
  24. like = response.css( "a + span::text").extract()[index].replace( ' · 喜欢 ', '')
  25. url = self.domain + response.css( '.title a::attr(href)').extract()[index]
  26. yield { "title" : i, "like": like, "url": url}
  27. ######################## Debug ###############################
  28. # from scrapy.shell import inspect_response
  29. # inspect_response(response, self)
  30. # 将以上两句插入回调函数中任意位置,即可在运行过程中中断打开交互命令行,用于调试查看响应内容
  31. ######################## Run ###############################
  32. # scrapy runspider num1.py -o 1.json

文本后处理

  • 用于从上一步生成的json文件中提取数据并排序生成简单的markdown。

 
 
  1. # -*- coding: utf-8 -*-
  2. import json
  3. with open( '1.json', 'r') as f:
  4. data = json.load(f)
  5. data = sorted(data, key = lambda x: int(x[ 'like']), reverse= True)
  6. # 以喜欢数对文章进行排序
  7. with open( '1.md', 'w') as m:
  8. m.write( '### 爬虫文章 in 简书程序员专题:\n')
  9. for i in data:
  10. m.write( '- *like*:**{like}** - [{title}]({url})\n'.format(**i))
  11. # **i 表示解包字典

Scrapy官方文档



转载于:https://www.jianshu.com/p/dcd6438ce4c7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值