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()))
相关推荐
若亦_Royi10 分钟前
C++ 的大括号的用法合集
开发语言·c++
KevinRay_12 分钟前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack43 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发