文章目录
- 什么是Scrapy?
- 创建Scrapy项目
- 编写Scrapy Spider
- 创建Item类
- 配置数据存储
- 运行Scrapy爬虫
- 处理常见问题
- 结论
- Python技术资源分享
- 1、Python所有方向的学习路线
- 2、学习软件
- 3、入门学习视频
- 4、实战案例
- 5、清华编程大佬出品《漫画看学Python》
- 6、Python副业兼职与全职路线
什么是Scrapy?
Scrapy是一个基于Python的强大的开源网络爬虫框架,用于从网站上抓取信息。它提供了广泛的功能,使得爬取和分析数据变得相对容易。Scrapy的特点包括:
- 强大的数据提取工具,支持XPath和CSS选择器。
- 简化的HTTP请求和响应处理。
- 可配置的下载中间件,用于处理不同类型的请求。
- 数据存储支持,包括JSON、CSV、XML等。
- 并发请求管理,提高效率。
创建Scrapy项目
要使用Scrapy来爬取网站,首先需要创建一个Scrapy项目。下面是创建一个名为douban_top250的Scrapy项目的步骤:
- 打开终端,导航到您想要创建项目的目录,并运行以下命令:
scrapy startproject douban_top250
- 进入项目目录:
cd douban_top250
- 创建一个用于爬取电影信息的Spider:
scrapy genspider douban_movie douban.com
现在,项目的基本结构已经创建,包括爬虫(Spider)模板文件。
编写Scrapy Spider
Spider是Scrapy项目中负责定义如何抓取信息的部分。需要编辑Spider文件,以指定要爬取的URL、如何处理响应和如何提取数据。
以下是一个示例Spider代码:
import scrapy
from douban_top250.items import DoubanTop250Item
class DoubanMovieSpider(scrapy.Spider):
name = 'douban_movie' # Spider的名称
allowed_domains = ['douban.com'] # 允许爬取的域名
start_urls = ['https://movie.douban.com/top250'] # 起始URL
def parse(self, response):
for movie in response.css('ol.grid_view li'):
item = DoubanTop250Item() # 创建一个DoubanTop250Item对象用于存储数据
item['rank'] = movie.css('em::text').get() # 提取电影排名
item['title'] = movie.css('.title::text').get() # 提取电影标题
item['rating'] = movie.css('.rating_num::text').get() # 提取电影评分
item['link'] = movie.css('a::attr(href)').get() # 提取电影链接
yield item # 返回Item以供后续处理
next_page = response.css('.next a::attr(href)').get() # 提取下一页的链接
if next_page is not None:
yield response.follow(next_page, self.parse) # 继续爬取下一页
在这个Spider中,指定了Spider的名称(name)、允许的域名(allowed_domains)、起始URL(start_urls)以及如何解析响应的方法(parse)。使用CSS选择器来提取排名、标题、评分和链接等信息,并将它们保存到一个自定义的Item类中。
创建Item类
在Scrapy中,Item是用来定义要提取的数据结构的类。在的项目中,创建了一个DoubanTop250Item类,用于定义电影信息的数据结构。以下是Item类的代码:
import scrapy
class DoubanTop250Item(scrapy.Item):
rank = scrapy.Field()
title = scrapy.Field()
rating = scrapy.Field()
link = scrapy.Field()
在这个类中,定义了四个字段:排名(rank)、标题(title)、评分(rating)和链接(link)。这些字段将用于存储从网页上提取的数据。
配置数据存储
Scrapy允许您配置不同的数据存储选项,包括JSON、CSV、XML等格式。我选择将数据保存为JSON文件。
在项目的设置中,配置了FEEDS设置,以指定JSON文件的保存位置和格式:
FEEDS = {
'douban_top250.json': {
'format': 'json',
'encoding': 'utf-8',
},
}
这将数据以JSON格式保存到名为douban_top250.json的文件中。
运行Scrapy爬虫
一旦编写好Spider和Item类,并配置好数据存储选项,就可以运行Scrapy爬虫来抓取豆瓣Top 250电影数据了。运行以下命令:
scrapy crawl douban_movie
Scrapy将开始访问豆瓣电影网站的页面,抓取数据并保存为JSON文件。
拿到的数据如图:
处理常见问题
在爬取网站数据时,可能会遇到各种常见问题,如请求限制、页面解析问题和网络连接问题。以下是一些处理这些问题的一般指导:
-
请求限制:如果您遇到HTTP状态码403(禁止访问)或其他请求限制问题,可以尝试设置合适的User-Agent、使用IP代理、限制请求速度以及尊重网站的robots.txt规则。
本次遇到的问题:
DEBUG: Crawled (403) <GET https://movie.douban.com/top250> (referer: None)
解决方案: User-Agent设置:尝试在Scrapy中设置一个常见的浏览器User-Agent,以使请求看起来更像是由浏览器发出的。这可以通过在Spider中添加
USER_AGENT
设置来完成,如下:USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
-
页面解析问题:在编写Spider时,确保您的选择器和规则正确。经常检查网站的HTML结构,以适应可能的更改。
-
网络连接问题:网络连接问题可能会导致请求超时或失败。确保您
的网络连接稳定,使用合理的超时设置,以及适当处理连接异常。
结论
使用Scrapy爬取豆瓣Top 250电影数据是一个很好的示例,展示了如何创建一个功能强大的网络爬虫,用于从网站上抓取数据。在本文中,涵盖了创建Scrapy项目、编写Spider、数据提取、保存为JSON文件以及处理常见问题的方方面面。Scrapy为爬虫开发者提供了强大的工具,使得数据抓取变得更容易。
源码已上传到Github:[github.com/SteamPunkMa…]
Python技术资源分享
小编是一名Python开发工程师,自己整理了一套 【最新的Python系统学习教程】,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。
保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
如果你是准备学习Python或者正在学习,下面这些你应该能用得上:
1、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
2、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
3、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
4、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
5、清华编程大佬出品《漫画看学Python》
用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。
6、Python副业兼职与全职路线
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取(安全链接,放心点击)