python爬虫实战案例(爬取大学排名Top500、爬取58同城的房价信息、爬取小说《红楼梦》)

一、爬取网站大学排名Top500

1、选择要爬取目标网站

中国大学排名_中国教育在线 (eol.cn)
在这里插入图片描述
在这里插入图片描述

2、分析网站所需数据的源码

在这里插入图片描述
在这里插入图片描述

3、编写python爬虫程序

# -*- codeing = utf-8 -*-
from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配`
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作


class SchoolSorting:
    def __init__(self, baseUrl, savePath):
        self.baseUrl = baseUrl
        self.savePath = savePath
        self.findName = re.compile(r'<td>([\u4e00-\u9fa5]+)</td>')
        self.findScore = re.compile(r'<td>(\d+\.{0,1}\d*)</td>')
        self.html = ""  # 网页原始数据

        self.nameLink = []  # 大学名称
        self.scoreLink = []  # 大学排名和评分

        self.dataList = []

    def run(self):
        self.askURL()  # 爬取网页,得到网页原始数据
        self.getData()  # 处理,获取大学名称、大学排名和评分s
        self.getListData()  # 集成大学名称、大学排名和评分
        self.saveData()  # 保存数据到表格

    # 爬取网页,得到网页原始数据
    def askURL(self):
        head = {
     # 模拟浏览器头部信息,向服务器发送消息
            "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"
        }
        # 用户代理,表示告诉服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

        request = urllib.request.Request(self.baseUrl, headers=head)
        html = ""
        try:
            response = urllib.request.urlopen(request)
            html = response.read().decode("utf-8")
        except urllib.error.URLError as e:
            if hasattr(e, "code"):
                print(e.code)
            if hasattr(e, "reason"):
                print(e.reason)
        self.html = html

    # 处理,获取大学名称、大学排名和评分
    def getData(self):
        soup = BeautifulSoup(self.html, "html.parser")

        item = soup.find('div', class_="u-body")  # 查找符合要求的字符串

        item = str(item)
        self.nameLink = re.findall(self.findName, item)  # 通过正则表达式查找
        self.scoreLink = re.findall(self.findScore, item)
        print(self.nameLink)
        print(self.scoreLink)

    # 集成大学名称、大学排名和评分
    def getListData(self):
        j = 0
        z = 3
        try:
            for i in range(len(self.nameLink) + len(self.scoreLink)):
                if i % 3 == 0:
                    self.dataList.append(self.scoreLink[j])
                    j = j + 1
                elif i % 3 == 1:
                    self.dataList.append(self.nameLink[z])
                    z = z + 1
                elif i % 3 == 2:
                    self.dataList.append(self.scoreLink[j])
                    j = j + 1
        except Exception
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值