python爬虫实践

两个python程序的小实验(附带源码)

题目1

爬取http://www.gaosan.com/gaokao/196075.html 中国大学排名,并输出。提示:使用requests库获取页面的基本操作获取该页面,运用BeautifulSoup解析该页面绑定对象soup,soup.title, soup.string, soup.get_text()。pd.DataFrame创建二维数据。

python 复制代码
\# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
  try:
    r = requests.get(url, timeout=30)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text
  except:
    return ""

def fillUnivList(ulist, html):
  soup = BeautifulSoup(html, "html.parser")
  for tr in soup.find('tbody').children:  # 先检索到tbody标签
    if isinstance(tr, bs4.element.Tag):
      tds = tr('td')  # 查询tr中的td标签,等价于tr.find_all('td')
      \# 新版的排名封装在a标签中,所以这里需要具体到查找属性为'name-cn'的a标签并存储其字符串,即大学的中文名称
      a = tr('a','name-cn')
      ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[2].text.strip(),tds[4].string.strip()])  # 使用二维列表存储信息
def printUnivList(ulist, num):
  tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
  \# {3}表示需要填充时使用format的第三个变量进行填充,即使用中文空格
  print(tplt.format("排名", "学校名称", "地区", "总分", chr(12288)))
  for i in range(num):
    u = ulist[i]
    print(tplt.format(u[0], u[1], u[2], u[3], chr(12288)))


def main():
  uinfo = []
  url = "https://www.shanghairanking.cn/rankings/bcur/2021"
  html = getHTMLText(url)
  fillUnivList(uinfo, html)
  printUnivList(uinfo, 20)  # 20 univ

if __name__ == "__main__":
  main()
题目2:

从新闻中爬取NBA"西部球队"排名。https://nba.hupu.com/standings

如下图输出:

python 复制代码
import requests
from bs4 import BeautifulSoup

url = "https://nba.hupu.com/standings"
response = requests.get(url)
\# 打印响应内容,用于检查是否正确获取了网页数据
print(response.text)
soup = BeautifulSoup(response.text, "html.parser")

\# 确保找到的table不是None
table = soup.find("table", class_="players_table")  # 注意这里使用了class_,因为class是Python关键字
if table is None:
  print("没有找到class为rank-table的table,请检查网页结构或选择器是否正确。")
else:
  rows = table.find_all("tr")
  for row in rows:
        cells = row.find_all("td")

   if cells:  # 确保td元素存在才进行处理
    print(' '.join(cell.text.strip() for cell in cells if cell.text.strip()))

    print(' '.join(cell.text.strip() for cell in cells if cell.text.strip()))
相关推荐
Java后端的Ai之路8 小时前
RAG 还是 Agent 自主检索?Claude Code 删掉向量库之后,我把选型讲透了
开发语言·人工智能·prompt·agent·rag
starzy19908 小时前
深入理解Scala高阶函数:函数式编程核心
开发语言·scala
qq_1588954111111 小时前
AI 音乐生成完成后,音频 URL 为什么会过期?一套可恢复的交付方案
python·api·ai音乐
Warson_L13 小时前
高性能架构设计
python·go
databook13 小时前
新数据到手,先跑哪几步检查
python·数据分析
czq_268671948714 小时前
Python打卡第46天
开发语言·python
Flynt15 小时前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
Evand J16 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter18 小时前
ZPL文件预览
开发语言·c++
曲径海盗18 小时前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门