爬虫与反爬虫的斗争,就像一场没有硝烟的网络战争,而掌握Scrapy和bs4则是你最重要的武器。
爬虫与反爬虫:一场没有硝烟的战争
想象一下这样的场景:小莫想要某站上所有的电影,写了标准的爬虫不断地遍历某站的电影列表页面。这个站点的运维小黎发现某个时间段请求量陡增,分析日志后直接封杀了小莫的IP。
第二天,小莫变换策略:user-agent模仿百度,IP每爬半个小时就换一个IP代理。小黎设置了频率限制,每分钟超过120次请求的屏蔽IP,并检查hostname设置白名单。
这场技术博弈每天都在互联网的各个角落上演,而掌握Scrapy和bs4这两大利器,就是你在这种战争中最重要的生存技能。
Scrapy爬虫框架:为什么它如此强大?
Scrapy是目前Python中使用最广泛的爬虫框架。与简单的requests库相比,Scrapy提供了更强大、可扩展的爬虫解决方案。它包含了一个完整的爬虫生命周期管理系统,可以高效地处理请求调度、数据提取和存储。
把网站装进爬虫里,只需要四步:
- 新建项目(Project):新建一个新的爬虫项目
- 明确目标(Items):明确你想要抓取的目标
- 制作爬虫(Spider):制作爬虫开始爬取网页
- 存储内容(Pipeline):设计管道存储爬取内容
实战开始:搭建Scrapy爬虫项目
创建项目
在空目录下按住Shift键右击,选择"在此处打开命令窗口",输入以下命令:
scrapy startproject movie_crawler
其中,movie_crawler为项目名称。可以看到将会创建一个movie_crawler文件夹,目录结构如下:
movie_crawler/
scrapy.cfg
movie_crawler/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
明确目标(定义Item)
在Scrapy中,items是用来加载抓取内容的容器,有点像Python中的Dict(字典),但是提供了一些额外的保护减少错误。
我们想要获取的电影信息包括:名称、链接、评分、评价数和描述。修改items.py文件:
import scrapy
class MovieItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
url = scrapy.Field()
score = scrapy.Field()
rating_count = scrapy.Field()
description = scrapy.Field()
制作爬虫(Spider)
Spider是用户自己编写的类,用来从一个域(或域组)中抓取信息。在spiders目录下创建movie_spider.py文件:
import scrapy
from movie_crawler.items import MovieItem
class MovieSpider(scrapy.Spider):
name = "douban_movie"
allowed_domains = ["douban.com"]
start_urls = [
"https://movie.douban.com/top250"
]
def parse(self, response):
# 解析页面获取

最低0.47元/天 解锁文章
26万+

被折叠的 条评论
为什么被折叠?



