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()))
相关推荐
夜雪一千5 分钟前
Python URL解码详解:单层、双重URL解码实战与踩坑指南
linux·服务器·python
VIP_CQCRE6 分钟前
用 Ace Data Cloud 一站式接入 AI 视频生成:HappyHorse Videos API 实战指南
python·aigc·api·ai视频·acedatacloud
kali-Myon11 分钟前
定向 FGSM 攻击:让神经网络《指猫为狗》
图像处理·python·神经网络·安全·机器学习·fgsm
白杨尚青12 分钟前
C++入门篇(十一):string(中)——容量与增删改查:一篇吃透所有常用接口(万字详解)
java·开发语言·c++
老歌老听老掉牙13 分钟前
旅行商问题:从数学模型到 Python 实战
开发语言·python
CC数分14 分钟前
数据可视化入门:用Python把一堆数字变成一张图
开发语言·python·信息可视化·数据分析
java_nnnn14 分钟前
JavaEE进阶-JavaScript初识
开发语言·前端·javascript·java-ee·ecmascript
打工仔折腾 AI21 分钟前
Prometheus接入Pushgateway实战:二进制与Docker部署、指标推送与远程写入
后端·python·docker·容器·性能优化·prometheus·ai agent 实战
YYYing.32 分钟前
【设计模式系列 (五) 】原型模式
开发语言·后端·设计模式·原型模式·c/c++
重生之小比特35 分钟前
【C++进阶】哈希表实现
开发语言·c++·哈希