百度SEO

百度SEO

Products

当前位置:首页 > 百度SEO >

李子贤的数据采集作业完成情况如何?

96SEO 2026-02-23 15:29 0


在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。

李子贤的数据采集作业完成情况如何?

(1)代码和运行结果

sqlite3.connect("weathers.db")self.cursor

创建天气数据表,主键为城市+日期self.cursor.execute("""create

table

若表已存在则清空表数据self.cursor.execute("delete

from

closeDB(self):self.con.commit()

self.con.close()def

temp):try:self.cursor.execute("""insert

into

show(self):self.cursor.execute("select

from

打印表头print("%-16s%-16s%-32s%-16s"

("city",

rows:print("%-16s%-16s%-32s%-16s"

(row[0],

城市与对应天气网代码的映射(用于构造请求URL)self.cityCode

{"北京":

self.cityCode.keys():print(f"{city}

code

f"http://www.weather.com.cn/weather/{self.cityCode[city]}.shtml"try:#

发送HTTP请求req

urllib.request.urlopen(req)data

data.read()

li.select('p[class="wea"]')[0].text#

span')[0].text

调用数据库插入方法存储数据self.db.insert(city,

date,

cities:self.forecastCity(city)#

__name__

WeatherForecast()ws.process(["北京",

"上海",

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031171125025-795428111.png"

(2)心得体会

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031171458891-125394241.png"

从上图的url网址中可以看出各个不同的城市之间只需要修改url城市编号即可,所以我们可以构建一个映射表,去分别访问不同城市的url。

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031171825882-419727685.png"

通过f12我们可以很清晰的看到我们先要的数据都被存放在一个class='t

clearfix'的ul中,只要去遍历ul下面的每一个li,利用css去定位爬取,就可以得到我们想要的结果

总之,无论使用re、css,只要明确自己所要爬取的网页结构,就可以轻松爬取到

用requests和BeautifulSoup库方法定向爬取股票相关信息,并存储在数据库中。

(1)代码和运行结果

sqlite3.connect('stock_data.db')cursor

conn.cursor()#

创建股票数据表,定义各字段及类型cursor.execute('''CREATE

TABLE

sqlite3.connect('stock_data.db')cursor

datetime.now().strftime('%Y-%m-%d

%H:%M:%S')#

data_list:cursor.execute('''INSERT

INTO

(data['code'],data['name'],data['latest_price'],data['change_percent'],data['change_amount'],data['volume'],data['turnover'],data['increase'],crawl_time))conn.commit()conn.close()#

爬取股票数据并处理格式转换

f"https://push2.eastmoney.com/api/qt/clist/get?np=1&fltt=1&invt=2&cb=jQuery37107275901173684839_1761722704966&fs=m%3A0%2Bt%3A6%2Bf%3A!2%2Cm%3A0%2Bt%3A80%2Bf%3A!2%2Cm%3A1%2Bt%3A2%2Bf%3A!2%2Cm%3A1%2Bt%3A23%2Bf%3A!2%2Cm%3A0%2Bt%3A81%2Bs%3A262144%2Bf%3A!2&fields=f12%2Cf13%2Cf14%2Cf1%2Cf2%2Cf4%2Cf3%2Cf152%2Cf5%2Cf6%2Cf7%2Cf15%2Cf18%2Cf16%2Cf17%2Cf10%2Cf8%2Cf9%2Cf23&fid=f3&pn={page}&pz={pagesize}&po=1&dect=1&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_=1761722704968"try:#

设置请求头,模拟浏览器访问headers

"https://www.eastmoney.com/","Accept":

"text/javascript,

response.text[response.text.find('(')

response.text.rfind(')')]else:print("返回数据非JSONP格式,无法解析")return

[]#

位转换(API返回原始数据为最小单位,需转换为常规显示单位)stock_info

{'code':

stock_info['name']:stock_list.append(stock_info)return

stock_listelse:print(f"API返回数据结构异常:{data.get('rc',

'无返回信息')}")return

requests.exceptions.RequestException

e:print(f"网络请求错误:

e:print(f"JSON解析错误(返回内容:{response.text[:100]}...):

{e}")

打印表头,使用制表符和对齐符保证格式整齐print(f"\n{'序号':<4}\t{'代码':<8}\t{'名称':<8}\t{'最新价':<8}\t{'涨跌幅(%)':<10}\t{'涨跌额':<8}\t{'成交量':<10}\t{'成交额(万)':<10}\t{'涨幅(%)':<8}")print("-"

120)

1):print(f"{i:<4}\t{stock['code']:<8}\t{stock['name']:<8}\t{stock['latest_price']:<8.2f}\t"f"{stock['change_percent']:<10.2f}\t{stock['change_amount']:<8.2f}\t{stock['volume']:<10}\t"f"{stock['turnover']:<10.1f}\t{stock['increase']:<8.2f}")def

main():init_db()print("数据库初始化完成,开始爬取股票数据...")total_pages

每页数据量#

stock_list:print_stock_data(stock_list)

存储数据print(f"第{page}页数据已保存至stock_data.db(共{len(stock_list)}条记录)")else:print(f"第{page}页未获取到有效股票数据")time.sleep(3)print(f"\n爬取完成!

数据已存储至stock_data.db")if

__name__

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031173636971-905160615.png"

(2)心得体会

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031173747719-1577203015.png"

通过f12去抓包到相应的信息包,可以从预览中查看到存储的数据,将这个我们所需要的包的标头复制下来,通过浏览器可以查看到我们所需要的信息存储在data下的diff

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031173933589-1187100965.png"

这个网页结构很整洁也很清晰,所以只需要找到我们所需对应的数据,用get方法获取请求的参数f数据即可得到

这道题是用了一种新方法,刚开始还不能够很熟练的掌握,抓包的时候也需要一个一个去点击查看是不是自己想要的包,第一次代码运行出来的时候,我发现API返回原始数据为最小单位,需要我们对数据进行处理,转换为常规显示单位

爬取中国大学2021主榜(https://www.shanghairanking.cn/rankings/bcur/2021)所有院校信息,并存储在数据库中,同时将浏览器F12调试分析的过程录制Gif加入至博客中。


(1)代码和运行结果

save_path="payload.js"):"""下载payload.js文件到本地"""try:headers

{"User-Agent":

timeout=15)response.raise_for_status()with

open(save_path,

f:f.write(response.text)print(f"下载成功,保存至:

{os.path.abspath(save_path)}")return

Trueexcept

requests.exceptions.RequestException

e:print(f"下载失败:

parse_all_rankings(file_path="payload.js"):"""解析本地文件,提取所有排名数据"""if

not

os.path.exists(file_path):print(f"{file_path}不存在,无法解析")return

[]#

re.search(r'univData:\s*\[(.*?)\],\s*indList:',

content,

univ_data_match:print("未找到核心数据区域")return

[]#

re.findall(r'\{[^}]*univNameCn:"[^"]+"[^}]*\}',

re.S)all_rankings

re.search(r'univNameCn:"(.*?)"',

item).group(1)

re.search(r'univNameCn:"(.*?)"',item)

else

re.search(r'univNameEn:"(.*?)"',

item).group(1)

re.search(r'univNameEn:"(.*?)"',item)

else

rank_match.group(1).strip('"').isdigit():rank

int(rank_match.group(1).strip('"'))else:rank

idx

province_match.group(1).strip('"')

province_match

province_map.get(province_code,

"未知省份")#

re.search(r'univCategory:([^,]+)',

item)category_code

category_map.get(category_code,

"未知类型")#

score_match.group(1).strip('"')score

float(score_str)

re.search(r'univTags:\[([^\]]*)\]',

item)if

re.search(r'indData:(\{[^}]+\})',

item)if

re.search(f'"{code}":"?([^,"]+)"?',

ind_str)if

val_match.group(1).strip()ind_data[name]

float(val)

组装数据all_rankings.append({"rank":

rank,"name_cn":

ind_data.get("办学层次"),"discipline_level":

ind_data.get("学科水平"),"talent_train":

ind_data.get("人才培养"),"crawl_time":

datetime.datetime.now().strftime("%Y-%m-%d

{len(all_rankings)}

create_db_connection(db_file):"""创建与SQLite数据库的连接"""conn

Nonetry:conn

sqlite3.connect(db_file)print(f"数据库连接成功

(SQLite版本:

create_ranking_table(conn):"""创建大学排名表"""try:sql_create_rankings_table

"""CREATE

conn.cursor()cursor.execute(sql_create_rankings_table)print("大学排名表创建成功")except

Error

rankings:print("没有数据可插入")return

Falsetry:#

conn.cursor()cursor.execute("DELETE

FROM

rankings:data_to_insert.append((item['rank'],item['name_cn'],item['name_en'],item['province'],item['category'],item['score'],item['tags'],item['school_level'],item['discipline_level'],item['talent_train'],item['crawl_time']))#

data_to_insert)conn.commit()print(f"成功插入

{cursor.rowcount}

main():"""主函数:下载-解析-存储到数据库全流程"""#

配置参数js_url

"https://www.shanghairanking.cn/_nuxt/static/1761118404/rankings/bcur/2021/payload.js"local_file

"payload.js"db_file

local_file):print("无法继续,缺少必要的数据源文件")return#

parse_all_rankings(local_file)if

not

all_rankings:print("解析过程出现问题,无法获取数据")return#

步骤3:数据库操作conn

create_db_connection(db_file)if

conn

关闭连接conn.close()print("数据库连接已关闭")else:print("无法建立数据库连接,数据未保存")#

步骤4:打印部分结果预览print("\n数据预览:")print(f"{'排名':<6}{'学校':<18}{'省市':<6}{'类型':<8}{'总分':<6}")print("-"

45)for

print(f"{item['rank']:<6}{item['name_cn']:<18}{item['province']:<6}{item['category']:<8}{str(item['score']):<6}")print(f"\n共解析

{len(all_rankings)}

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031184942594-633988696.png"

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031192036891-1804035461.gif"

(2)心得体会

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031185103500-2146911967.png"

依旧是打开网址后进行抓包,找到存储数据的包,但是当我们用浏览器去预览这个包的标头时,我发现它的信息是乱码的

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031185222920-1550960990.png"

这就造成我们没有办法很清晰的去查看数据的结构,同学给我提供了一个思路,他让我将这个js文件下载并解析下来

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031185509819-1148459476.png"

通过下载解析后,我们可以清楚的看到存储数据的结构,通过re正则表达式去匹配univNameCn(学校)、ranking(排名)、province(省份)等等。

data-src="https://img2024.cnblogs.com/blog/3714476/202510/3714476-20251031190223467-1479610886.png"

但是在查看结构的时候,我们发现这个网址为了不想让我们能够很轻易的爬取到数据,它应用了一些密钥来转换,所以我们只能去添加一下映射表,先爬取它的代号,再将其通过密钥转换过来。

代码地址:https://gitee.com/lizixian66/shujucaiji/tree/homework2/



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback