Python爬取网站信息(大气AQI网站)

本文介绍了一个使用Python进行空气质量指数(AQI)数据抓取的实战案例。通过requests和BeautifulSoup库从指定网站获取HTML内容,解析并提取AQI数据,最后将数据插入MySQL数据库中。文章展示了完整的代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学了一段时间python,检验一下成果:
python版本3.7

最终将爬取的数据插入数据库:
在这里插入图片描述

import time

import pymysql
import requests
from bs4 import BeautifulSoup

#连接数据库
from requests import RequestException

con = pymysql.connect(host="xxx.xx.xx.xx", user="root", password="xxx123", database="test", charset="utf8")
cursor = con.cursor()

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
url='http://datacenter.mee.gov.cn/aqiweb2/'

def getAQIData(url):
    try:
        #print(url)
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        print(url + ',visit error')
        return None
    except RequestException:
        print('请求异常')
        return None

def edit_html(html):
    soup=BeautifulSoup(html,"html.parser")
    soup.prettify()
    pushTime=soup.find_all(id="hour")[0]['value']
    nickname = soup.find(id="legend_01_table").find_all('tr')
    tableData=soup.findAll('table')[0];

    for tragg in soup.findAll('tr'):
        tdarray=[];
        for tdagg in tragg.find_all('td'):
            tdval=get_tdagg(tdagg)
            tdarray.append(tdval)
        save_mysql_js(tdarray)



def get_tdagg(html):
    return str(html.get_text())


def save_mysql_js(i):
    if len(i) > 4:
        sql = "insert into tb_js(zz,title,intro,url,content) values(%s, %s, %s, %s, %s);"
        if i[0] == '北京市':
            print(i[0] + ';' + i[1] + ';' + i[2] + ';' + i[3]+';'+i[4])
            print(cursor.execute(sql, [str(i[0]), str(i[1]), str(i[2]), str(i[3]), str(i[4])]))

def time_Run():
   html=getAQIData(url)
   if html is not None:
       try:
           # 执行sql语句
           edit_html(html);
           # 提交到数据库执行
           con.commit()
       except:
           # Rollback in case there is any error
           con.rollback()

       # 关闭数据库连接
       #cursor.close()
       #con.close()

def timer(n):
    while True:
        print('====定时开始======')
        time.sleep(n)
        time_Run()


#5s
timer(5)





爬取空气质量检测网的部分城市的历年每天质量数据 思路----------------------------------------- 从某城市的空气质量网页获取某市每月的链接,再爬取每个月的表格数据。连云港市:https://www.aqistudy.cn/historydata/daydata.php?city=连云港 连云港2014年5月的空气质量:https://www.aqistudy.cn/historydata/daydata.php?city=连云港&month=2014-05 遇到的问题----------------------------------------- 获取的网页中的表格数据隐藏,尝试requests无法获取。判断可能是动态加载的网页 尝试----------------------------------------- 1. 通过XHR,js查找隐藏数据的加载网页,没有找到。 2. 使用phantomjs.get() result=pd.read_html ,可以获得隐藏的表格数据,但是并不稳定,只是偶尔出现加载的表格数据,无法大规模的获取 解决方法----------------------------------------- 查找资料得知这个网站的表格数据在Console里的items中, 使用selenium的webdriver.firefox(),driver.execute_script("return items") 数据可获得。 仍遇到的问题:----------------------------------------- 爬取一个网页可获得数据,但是连续的获取网页,会出现两个错误。 1.Message: ReferenceError: items is not defined 2.connection refused 解决方法: 1.connection refused问题,可能是网页开太多,使用driver.quit() 2. 如果 execute_script 还是出错,可尝试pd.read_html获取信息。之前用phantomjs获取的时候输出空的表格,可能由于加载不够,用 Waite直到table出现之后再获取网页 Element=wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[3]/div[1]/div[1]/table/tbody"))) 3.之后出现偶尔出现输出为空,使用循环,如果输出表格为空,再重新获取。 if len(result)>1: filename = str(month) + '.xls' result.to_excel('E:\python\案例程序\data\\' + filename) print('成功存入'+filename) driver.quit() else: driver.quit() return getdata(monthhref,month)
### 使用Python虫抓取生态网站的数据 #### Python虫的基础能力 Python作为一种功能强大且易于学习的语言,在数据采集领域具有显著优势。它拥有丰富的第三方库支持,例如`requests`用于发送HTTP请求,`BeautifulSoup`和`lxml`用于解析HTML文档,以及`Selenium`用于模拟浏览器行为[^1]。 对于生态相关的网站数据抓取,可以采用以下方法实现高效的数据提取: --- #### 数据抓取的具体流程 1. **目标网站分析** 首先需要明确目标网站的结构特。通过浏览器开发者工具查看页面源码,定位所需数据的位置及其对应的标签属性。如果涉及分页或多参数查询,则需进一步研究URL模式及请求头中的关键字段[^3]。 2. **构建请求** 利用`requests`模块发起GET或POST请求访问指定链接。以下是基本代码框架: ```python import requests url = 'https://example.com/ecology-data' # 替换为目标站的实际路径 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': 'https://example.com/' } response = requests.get(url, headers=headers) if response.status_code == 200: html_content = response.text else: print(f"Failed to retrieve data: {response.status_code}") ``` 3. **解析网页内容** 借助`BeautifulSoup`或其他解析器提取感兴趣的信息片段。假设我们希望获取某生态监测平台上的空气质量指数(AQI),则可执行如下操作: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') aqi_elements = soup.find_all('div', class_='aqi-value') # 调整CSS选择器匹配实际布局 aqis = [element.text.strip() for element in aqi_elements] ``` 4. **存储结果** 将收集到的数据保存至CSV文件或者数据库中以便后续分析处理。这里给出一个简单的例子演示如何借助Pandas完成这一过程[^2]: ```python import pandas as pd df = pd.DataFrame({'AQI Values': aqis}) df.to_csv('ecological_data.csv', index=False, encoding='utf-8-sig') ``` 5. **异常处理与性能优化** 实际应用过程中难免会遇到网络波动等问题影响程序稳定性;因此建议加入重试机制、设置合理的延时间隔来降低被封禁风险的同时提高运行效率。 --- #### 注意事项 - 爬取前务必阅读并遵守目标网站的服务条款(TOS),确保活动合法合规。 - 对于动态加载的内容可能单纯依靠静态HTML无法满足需求,此时考虑引入像Selenium这样的自动化测试工具辅助完成交互动作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值