1、项目简介
目标:爬取迁木网世界大学排名及大学基本信息,图示
步骤:
- 获取排名当前页中所有大学的链接
- 跳转链接,获取表格中大学的基本信息。
2、scrapy创建项目
2.1、创建项目
创建项目命令:
scrapy startproject myproject [project_dir]
# 创建我们的项目
scrapy startproject qianmu1
- myproject谁自定义项目名称,路径若不指定,默认为当前路径。
2.2、创建spider
通过前面知道,spider用于处理响应会的数据,命令如下:
scrapy gensider example example.com
- example:为spider名称
- example.com: 为要爬取的域名,限定爬取的范围。
创建我们的spider
cd qianmu1
scrapy genspider usinfo www.qianmu.org
2.3、编写逻辑代码
usinfo.py代码如下:
import scrapy
class UsinfoSpider(scrapy.Spider):
name = 'usinfo'
# 允许爬取的域名
allowed_domains = ['www.qianmu.org']
# 爬取起始url
start_urls = ['http://www.qianmu.org/ranking/1528.htm']
# 当框架请求start_urls成功时,自动调用该方法
def parse(self, response):
# 提取链接
links = response.xpath('//div[@class="rankItem"]/table//tr[position()>1]/td[2]/a/@href').getall()
# 3、解析大学链接获取表格数据
for link in links:
yield response.follow(link, self.parse_university)
def parse_university(self, response):
"""解析大学链接获取详细信息"""
# 解析并获取获取大学名称
data = {'name': response.xpath('//div[@id="wikiContent"]/h1/text()').get()}
# 获取表格第一列
table = response.xpath('//div[@id="wikiContent"]/div[@class="infobox"]/table')
if table:
table = table[0]
keys = table.xpath('.//td[1]/p/text()').getall()
# 获取表格第二列,如果有多个p合并
cols = table.xpath('.//td[2]')
values = [''.join((col.xpath('.//text()').getall())).replace('\t', '') for col in cols]
if len(keys) == len(values):
data.update(zip(keys, values))
yield data
2.4、生成虚拟环境
命令:
virtualenv env
2.3、运行
步骤:
-
进入虚拟环境
cd env/Scripts activate
-
启动项目
scrapy craw usinfo
- usinfo:生成spider时的名称
3、项目目录
项目完整目录结构如图所示:
简单介绍各个目录/文件:
-
qianmu1:项目根目录
-
-env:虚拟环境
-
-qianmu1:创建项目自动生成
-
–spiders:放置所有的spiders,spider可以创建多个
-
—usinfo.py:某个具体的spider
-
–items.py:结构化的数据
-
–middlewares.py:中间件
-
–pipelines.py:管道,把解析后的数据放到哪里,比如持久化到数据库或者文件
-
–settings.py:配置文件
-
-scrapy.cfg:scrapy配置文件
关于虚拟环境的相关知识,可自行查阅相关文档。
参考视频:https://www.bilibili.com/video/BV1R7411F7JV p557~p558
源代码仓库地址:https://gitee.com/gaogzhen/python-study
QQ群:433529853