利用Scrapy框架21行代码构建Python爬虫实战指南

Ruby
Ruby
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍如何使用Scrapy框架在PyCharm环境中编写一个仅需21行代码的Python爬虫。通过解析HTML结构定义Item,创建Spider类处理页面数据,并配置Settings以UTF-8编码输出JSON文件。文章还涵盖了运行命令、已知追加数据Bug及定时任务等扩展功能建议,适合初学者快速上手Scrapy基础应用。

开发说明

开发环境选用PyCharm 2017.1(当前最新版本)。

开发框架采用Scrapy 1.3.3(当前最新版本)。

目标

抓取线报网站数据,并将结果保存至items.json文件中。

页面分析


根据上图所示,所有目标内容均位于CSS类名为post的div元素内。

以下是post元素的代码结构展示:

<div class="post">
<!-- baidu_tc block_begin: {"action": "DELETE"} -->
<div class="date"><span>04月</span><span class="f">07日</span></div><!-- baidu_tc block_end -->
<h2><a href="http://www.abckg.com/193.html" rel="external nofollow" title="4月7日 淘金币淘里程领取京东签到" rel="bookmark" target="_blank">4月7日 淘金币淘里程领取京东签到</a><span>已结束</span></h2>
<h6>发布日期: 2017-04-07 | 分类: <a href="http://www.abckg.com/xunibi" rel="external nofollow" >虚拟币</a> | 浏览:125177
</h6><div class="intro"><p>淘金币一键领取 http://021.tw/t/ https://www.chaidu.com/App/Web/Taobao-Coin/ 【电脑端30金币】 https://taojinbi.taobao.com/inde ... auto_take=true 【手机端30金币】 http://h5.m.taobao...</p></div></div>

实现方法

第一步,定义Items数据结构。

class DemoItem(scrapy.Item):
 id = scrapy.Field()
 title = scrapy.Field()
 href = scrapy.Field()
 content = scrapy.Field()

第二步,新建一个名为test的爬虫程序。

# -*- coding: utf-8 -*-
import scrapy
from demo.items import DemoItem
from scrapy.http import Request
class TestSpider(scrapy.Spider):
 #定义爬虫的名字和需要爬取的网址
 name = "test"
 allowed_domains = ["www.abckg.com"]
 start_urls = ['http://www.abckg.com/']
 def parse(self, response):
 for resp in response.css('.post'):
  #实例化item
  item = DemoItem()
  #把获取到的内容保存到item内
  item['href'] = resp.css('h2 a::attr(href)').extract()
  item['title'] = resp.css('h2 a::text').extract()
  item['content'] = resp.css('.intro p::text').extract()
  yield item
  
 #下面是多页面的爬取方法
 urls = response.css('.pageinfo a::attr(href)').extract()
 for url in urls:
  yield Request(url, callback=self.parse)
 categorys = response.css('.menu li a::attr(href)').extract()
 for ct in categorys:
  yield Request(ct, callback=self.parse)

第三步,修改settings.py配置文件,添加以下代码以设置编码格式。

FEED_EXPORT_ENCODING = 'utf-8'

#运行

打开命令行工具(CMD)输入以下命令执行爬虫。

scrapy crawl test -o items.json

已知bug

若多次运行该爬虫,原有内容不会被覆盖,而是追加数据(这似乎是Scrapy的一个已知特性或Bug)。

可拓展内容

1、实现定时运行爬虫,当检测到网站更新时获取新数据并通过邮件发送通知。

2、增加数据重复检测机制。

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对本站的支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。