经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python项目--Scrapy框架(一)
来源:cnblogs  作者:Star_Zhao  时间:2018/10/16 9:35:18  对本文有异议

环境

win8, python3.7, pycharm

正文

1.Scrapy框架的安装

在cmd命令行窗口执行:

  1. pip install Scrapy

即可完成Scrapy框架的安装

2. 创建Scrapy项目

在cmd命令行窗口下切换到想要的目录下, 我这里是C:\Users\Administrator\PycharmProjects\untitled\Tests\Scrapy

执行下面代码, 即可在当前的"Scrapy"目录下生成JianShu项目文件夹. 

  1. scrapy startproject JianShu

文件夹结构如下:

 

items.py: 定义要爬取的项目

middlewares.py: 定义爬取时的中间介质

pipelines.py: 定义数据管道

settings.py: 配置文件

scrapy.cfg: Scrapy部署时的配置文件

3. 创建JianShuSpider

在cmd命令行依次执行以下代码, 即可在"JianShu/spiders"目录下创建JianShuSpider.py文件

  1. cd JianShu
  2. scrapy genspider JianShuSpider JianShuSpider.toscrape.com

 4. 定义要爬取的项目

在items.py中确定要爬取的信息: 简书热门专题中的主题, 内容, 文章数, 粉丝数这四个信息

  1. 1 import scrapy
  2. 2 from scrapy.item import Item, Field
  3. 3
  4. 4 class JianshuItem(Item):
  5. 5 # define the fields for your item here like:
  6. 6 # name = scrapy.Field()
  7. 7 title = Field() #主题
  8. 8 content = Field() #内容
  9. 9 article = Field() #文章
  10. 10 fans = Field() #粉丝

5. 编写爬虫主程序

简书热门专题采用异步加载, 在NetWork中选择XHR来确定异步加载的url: https://www.jianshu.com/recommendations/collections?page=(1,2,3,4.....)&order_by=hot

在JianShuSpider.py中编写主程序:

  1. 1 import scrapy
  2. 2 from scrapy.spiders import CrawlSpider
  3. 3 from scrapy.selector import Selector
  4. 4 from JianShu.items import JianshuItem
  5. 5 from scrapy.http import Request
  6. 6 class JianShu(CrawlSpider):
  7. 7 name = 'JianShu'
  8. 8 allowed_domains = ['JianShuSpider.toscrape.com']
  9. 9 start_urls = ['https://www.jianshu.com/recommendations/collections?page=1&order_by=hot']
  10. 10 def parse(self, response):
  11. 11 item = JianshuItem()
  12. 12 #对源码进行初始化
  13. 13 selector = Selector(response)
  14. 14 #采用xpath进行解析
  15. 15 infos = selector.xpath('//div[@class="collection-wrap"]')
  16. 16 for info in infos:
  17. 17 title = info.xpath('a[1]/h4/text()').extract()[0]
  18. 18 content = info.xpath('a[1]/p/text()').extract()
  19. 19 article = info.xpath('div/a/text()').extract()[0]
  20. 20 fans = info.xpath('div/text()').extract()[0]
  21. 21 #加入判断, 如果content存在则返回content[0], 否则返回''
  22. 22 if content:
  23. 23 content = content[0]
  24. 24 else:
  25. 25 content = ''
  26. 26 item['title'] = title
  27. 27 item['content'] = content
  28. 28 item['article'] = article
  29. 29 item['fans'] = fans
  30. 30 yield item
  31. 31 #列表生成式, 生成多个url
  32. 32 urls = ['https://www.jianshu.com/recommendations/collections?page={0}&order_by=hot'.format(str(page)) for page in range(2,37)]
  33. 33 for url in urls:
  34. 34 yield Request(url,callback=self.parse)

6. 保存到MongoDB

利用pipelines数据管道将其存储至MongoDB, 在pipelines.py编写:

  1. 1 import pymongo
  2. 2
  3. 3 class JianshuPipeline(object):
  4. 4 def __init__(self):
  5. 5 '''连接Mongodb'''
  6. 6 client = pymongo.MongoClient(host='localhost')
  7. 7 db = client['test']
  8. 8 jianshu = db["jianshu"]
  9. 9 self.post = jianshu
  10. 10 def process_item(self, item, spider):
  11. 11 '''写入Mongodb'''
  12. 12 info = dict(item)
  13. 13 self.post.insert(info)
  14. 14 return item

7. setting配置

  1. 1 BOT_NAME = 'JianShu'
  2. 2 SPIDER_MODULES = ['JianShu.spiders']
  3. 3 NEWSPIDER_MODULE = 'JianShu.spiders'
  4. 4 #从网站请求头复制粘贴User-Agent
  5. 5 USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
  6. 6 ROBOTSTXT_OBEY = True
  7. 7 #设置等待时间5秒
  8. 8 DOWNLOAD_DELAY = 5
  9. 9 #配置项目管道
  10. 10 ITEM_PIPELINES = {
  11. 11 'JianShu.pipelines.JianshuPipeline': 300,
  12. 12 }

8. 新建main.py文件

在JianShu文件目录下新建main.py文件, 编辑如下代码:

  1. 1 from scrapy import cmdline
  2. 2 cmdline.execute('scrapy crawl JianShu'.split())

9. 运行main.py文件

在运行之前, 需确保mongodb服务已经启动, 执行结果如下:

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号