简单的Scrapy数据爬虫
数据爬取展示:


环境准备:
- Python 3+版本
- Pycharm(可以没有)
- Scrapy环境
Scrapy环境安装问题
//cmd中输入即可(一般在windows系统都会出问题)
pip install scrapy
Scrapy环境安装问题
-
缺少Scrapy的依赖包问题
一般缺少parsel, w3lib, pyOpenSSL,cryptography的whl文件,按顺序进行pip install XXX。如果在线安装不了,去官网进行下载。离线进行安装 pip install XXXX.whl

-
pip提醒没有此命令
方法一:进入Python安装目录中,找到Scripts文件夹中进行输入cmd命令行。(指标不治本)

在电脑中环境变量中path中配置Scripts路径(治本之策)

-
pip提醒升级问题
解决方法:
python -m pip install -U --force-reinstall pip
python -m pip install --upgrade pip仍然更新pip版本失败,用easy_install命令解决问题
-
安装Scrapy安装提醒Time out
解决办法离线安装Scrapy的whl文件。
https://pan.baidu.com/s/1cMlFdSqprMUrxx81xu1NzQ
提取码:h7rw
Xpath基础
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
花个五分钟在W3C上看看就知道了,不是很难。
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
方便在网页上进行XPath的编写,Google浏览器有个很好的插件——XPath Helper
网盘地址:https://pan.baidu.com/s/16ourySoo45BpbfDRjUT32w
提取码:aps7

直接利用这个插件在网页端可以看到XPath获取的信息
eg:(当当网——获取图书信息XPath)//div[@id="search_nature_rg"]/ul/li/p[@class="detail"]
Scrapy代码编写
在新建的文件夹下,cmd命令中输入
scrapy startproject XXXSpider
一般的命名规范是XXXSpider,文件名+Spider
创建爬虫
scrapy genspider 爬虫名字 网站域名
在cfg文件目录下执行命
<u>爬虫名字不能和项目名字重名</u>
网站域名:baidu.com google.com
Setting文件的修改部分:
1、ROBOTSTXT_OBEY规则设置为False(不用遵守网站的robot文件,如果遵守可能什么都爬不下来)
2、添加User-Agent(Setting文件DEFAULT_REQUEST_HEADERS取消注释)
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'


依照以上两步操作,可以得到的文件目录如下:


在新增的爬虫文件中编写代码:(爬取的是博雅地名网)
import scrapy
class GazetterSpider(scrapy.Spider):
name = 'gazetter'
allowed_domains = ['tcmap.com.cn']
start_urls = ['http://www.tcmap.com.cn/jiangsu/']
//未遍历
def parse(self, response):
# selectors = response.xpath('');
city_name = response.xpath('//tr[@bgcolor="#f8f8f8"]/td/strong/a/text()').get()
population = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[2]/text()').get()
area = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[3]/text()').get()
code = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[4]/text()').get()
administrative_division = response.xpath('//tr[@bgcolor="#f8f8f8"]/td[6]/a/text()').get()
detail = response.xpath('//td[@valign="top"][2]/text()').get()
items = {
'cityName': city_name,
'population': population,
'area': area,
'code': code,
'administrative_division': administrative_division,
'detail': detail
}
yield items
运行程序:
scrapy crawl XXXX -o xxx.json
Scrapy输出文件有四种格式——.json .csv等
编码问题
在Setting文件中添加
FEED_EXPORT_ENCODING='UTF-8'
否则输出的文件是Unicode格式,需要转码。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了