python中scrapy框架项目_Python项目--Scrapy框架(一)

本文档介绍了如何在Windows 8环境下,使用Python 3.7和PyCharm安装及配置Scrapy框架。通过创建Scrapy项目,定义爬取的字段,并编写爬虫主程序抓取简书热门专题的信息,包括主题、内容、文章数和粉丝数。此外,还展示了如何利用Scrapy的pipelines将数据保存到MongoDB数据库。整个流程详细阐述了从项目创建到数据存储的每个步骤。
摘要由CSDN通过智能技术生成

环境

win8, python3.7, pycharm

正文

1.Scrapy框架的安装

在cmd命令行窗口执行:

pip install Scrapy

即可完成Scrapy框架的安装

2. 创建Scrapy项目

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

8c1cb8dcf9fe215367c9030409dee224.png

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

scrapy startproject JianShu

文件夹结构如下:

03a82a79cbfbd2efee4c62218359c727.png

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

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

pipelines.py: 定义数据管道

settings.py: 配置文件

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

3. 创建JianShuSpider

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

cd JianShu

scrapy genspider JianShuSpider JianShuSpider.toscrape.com

236ca2ffc8cbc2558c75aee597316dca.png

4. 定义要爬取的项目

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

1 importscrapy2 from scrapy.item importItem, Field3

4 classJianshuItem(Item):5 #define the fields for your item here like:

6 #name = scrapy.Field()

7 title = Field() #主题

8 content = Field() #内容

9 article = Field() #文章

10 fans = Field() #粉丝

5. 编写爬虫主程序

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

在JianShuSpider.py中编写主程序:

1 importscrapy2 from scrapy.spiders importCrawlSpider3 from scrapy.selector importSelector4 from JianShu.items importJianshuItem5 from scrapy.http importRequest6 classJianShu(CrawlSpider):7 name = 'JianShu'

8 allowed_domains = ['JianShuSpider.toscrape.com']9 start_urls = ['https://www.jianshu.com/recommendations/collections?page=1&order_by=hot']10 defparse(self, response):11 item =JianshuItem()12 #对源码进行初始化

13 selector =Selector(response)14 #采用xpath进行解析

15 infos = selector.xpath('//div[@class="collection-wrap"]')16 for info ininfos:17 title = info.xpath('a[1]/h4/text()').extract()[0]18 content = info.xpath('a[1]/p/text()').extract()19 article = info.xpath('div/a/text()').extract()[0]20 fans = info.xpath('div/text()').extract()[0]21 #加入判断, 如果content存在则返回content[0], 否则返回''

22 ifcontent:23 content =content[0]24 else:25 content = ''

26 item['title'] =title27 item['content'] =content28 item['article'] =article29 item['fans'] =fans30 yielditem31 #列表生成式, 生成多个url

32 urls = ['https://www.jianshu.com/recommendations/collections?page={0}&order_by=hot'.format(str(page)) for page in range(2,37)]33 for url inurls:34 yield Request(url,callback=self.parse)

6. 保存到MongoDB

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

1 importpymongo2

3 classJianshuPipeline(object):4 def __init__(self):5 '''连接Mongodb'''

6 client = pymongo.MongoClient(host='localhost')7 db = client['test']8 jianshu = db["jianshu"]9 self.post =jianshu10 defprocess_item(self, item, spider):11 '''写入Mongodb'''

12 info =dict(item)13 self.post.insert(info)14 return item

7. setting配置

1 BOT_NAME = 'JianShu'

2 SPIDER_MODULES = ['JianShu.spiders']3 NEWSPIDER_MODULE = 'JianShu.spiders'

4 #从网站请求头复制粘贴User-Agent

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 ROBOTSTXT_OBEY =True7 #设置等待时间5秒

8 DOWNLOAD_DELAY = 5

9 #配置项目管道

10 ITEM_PIPELINES ={11 'JianShu.pipelines.JianshuPipeline': 300,12 }

8. 新建main.py文件

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

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

9. 运行main.py文件

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

9438f5ca40ec9f270fb0cb34a00b755e.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个基于Python的爬虫框架,它可以帮助我们快速高效地抓取网站数据。在这里,我将介绍Scrapy的基本用法,让您能够快速入门。 安装Scrapy ----------------------- 在安装Scrapy之前,我们需要先安装Python。然后,我们可以通过以下命令来安装Scrapy: ``` pip install scrapy ``` 创建Scrapy项目 ----------------------- 创建Scrapy项目的命令是: ``` scrapy startproject project_name ``` 这个命令将会在当前目录下创建一个名为project_name的文件夹,其包含了Scrapy项目的基本结构。 编写Spider ----------------------- 在Scrapy,Spider是用来定义爬取网站的规则的。我们可以通过以下命令来创建一个Spider: ``` scrapy genspider spider_name domain_name ``` 其,spider_name是我们自己定义的Spider名称,domain_name是我们要抓取的网站域名。 接下来,我们需要在Spider定义如何爬取网站。这里我们以爬取“http://quotes.toscrape.com/”网站上的名言警句为例。我们可以在Spider定义如下规则: ```python import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('span small::text').get(), 'tags': quote.css('div.tags a.tag::text').getall(), } next_page = response.css('li.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 在上述代码,我们首先定义了Spider的名称,接着定义了我们要爬取的起始URL,最后定义了如何解析网页的函数parse()。在parse()函数,我们使用了Scrapy的选择器来提取网页的名言警句,并将其保存到字典。接着,我们使用response.follow()函数来获取下一页的URL,并继续解析。 运行Spider ----------------------- 要运行我们刚才创建的Spider,我们可以使用以下命令: ``` scrapy crawl spider_name ``` 其,spider_name是我们之前创建的Spider名称。 Scrapy会自动去抓取我们定义的起始URL,并根据我们定义的规则来解析网页。解析完成后,Scrapy会将结果保存到我们指定的位置。 总结 ----------------------- Scrapy是一个非常强大的Python爬虫框架,它可以帮助我们快速高效地抓取网站数据。在本教程,我们介绍了Scrapy项目的创建、Spider的定义以及如何运行Spider。如果您想更深入地学习Scrapy,可以参考官方文档:https://docs.scrapy.org/en/latest/。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值