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()))
相关推荐
拾木20015 分钟前
常见的限流算法
java·开发语言
处处清欢20 分钟前
MaintenanceController
java·开发语言
Python极客之家20 分钟前
基于机器学习的乳腺癌肿瘤智能分析预测系统
人工智能·python·机器学习·毕业设计·xgboost·可视化分析
牵牛老人26 分钟前
Qt技巧(三)编辑框嵌入按钮,系统位数判断,判断某对象是否属于某种类,控件取句柄,支持4K,巧用QEventLoop,QWidget的窗体样式
开发语言·qt
Niu_brave31 分钟前
Python基础知识学习(2)
开发语言·python·学习
geekrabbit38 分钟前
Ubuntu 22.04上安装Python 3.10.x
linux·python·ubuntu
神仙别闹1 小时前
基于C#+Mysql实现(界面)企业的设备管理系统
开发语言·mysql·c#
deflag1 小时前
第T1周:Tensorflow实现mnist手写数字识别
人工智能·python·机器学习·分类·tensorflow
大柏怎么被偷了1 小时前
【C++算法】位运算
开发语言·c++·算法
程序猿方梓燚1 小时前
C/C++实现植物大战僵尸(PVZ)(打地鼠版)
c语言·开发语言·c++·算法·游戏