小言_互联网的博客

【Python】Scrapy入门实例:爬取北邮网页信息并保存(学堂在线 杨亚)

461人阅读  评论(0)

内容来源

任务:学会爬取一个网站的部分信息,并以".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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场