内容来源
任务:学会爬取一个网站的部分信息,并以".json"文件形式保存
课程来源:大数据分析师(第一期)(北邮 杨亚)
爬取网站:教学辅助单位-北京邮电大学
项目基本流程概述:
1.新建项目(scrapy startproject xxx):新建一个新的爬虫项目
2.确定目标(编写items.py) :明确你想要抓取的目标
3.制作爬虫(spiders/xxspider.py) :制作爬虫开始爬取网页
4.存储内容(pipelines.py) :设计管道存储爬取内容
学习笔记
1、在命令窗口创建项目
scrapy startproject Demo
“先找到安装scrapy的目录:打开cmd命令行,先用cd命令转到该目录
下的venv\scripts,再键入命令: scrapy startproject test1,即可创建
一个新的项目。(教程中的项目名是test1,我这里叫Demo)”
【Demo n. 演示;样本唱片;示威】
2、创建begin.py文件
from scrapy import cmdline
cmdline.execute("scrapy crawl bupt".split())
创建后的位置如下图所示
3、修改items.py文件
import scrapy
class MyItem(scrapy.Item):
# define the fields for your item here like:
school = scrapy.Field()
link = scrapy.Field()
#pass
4、新建一个spider.py文件
对应网页的xpath获取方法示意图:
copy下的xpath内容:
/html/body/div[2]/div[2]/div[2]/div/ul/li[4]/div
spider.py中的代码:
import scrapy
from Demo.items import MyItem #从items.py中引入MyItem对象
class mySpider(scrapy.spiders.Spider):
name ="bupt" #爬虫的名字是bupt
allowed_domains = ["bupt.edu.cn/"] #允许爬取的网站域名
start_urls = ["https://www.bupt.edu.cn/yxjg1/jxjfdw1.htm#1268"] #初始URL,即爬虫爬取的第一个URL
def parse(self, response):
item = MyItem()
for each in response.xpath("/html/body/div/div[2]/div[2]/div/ul/li[4]/div/*"):
#for each in response.xpath("/html/body/div[2]/div[2]/div[2]/div/ul/li[3]/div/a[19]/*"):
item["school"] = each.xpath("text()").extract()
item["link"] = each.xpath("@href").extract()
if (item['school'] and item['link']): # 去掉值为空的数据
yield (item) # 返回item数据给到pipelines模块
此时的文件路径层次图:
5、修改piplines.py
import json
class MyPipeline (object):
def open_spider (self, spider):
try: #打开json文件
self.file = open("Bupt_MyData.json ", "w", encoding="utf-8")
except Exception as err:
print (err)
def process_item(self, item, spider):
dict_item = dict(item) # 生成字典对象
json_str = json.dumps(dict_item, ensure_ascii = False) +"\n" #生成 json串
self.file.write(json_str) # 将 json串写入到文件中
return item
def close_spider(self, spider):
self.file.close() #关闭文件
6、修改setting.py文件
将下列代码添加到最后即可
ITEM_PIPELINES = {'Demo.pipelines.MyPipeline': 300,}
7、运行begin.py文件
运行后部分结果:
后记
类似项目学习推荐:Scrapy实例————爬取学堂在线合作院校页面内容
转载:https://blog.csdn.net/qq_41856733/article/details/105838969
查看评论