地震数据爬虫

 目录

一、工具介绍

二、实现过程

        2.1 发送请求

        2.2 lxml解析数据

        2.3 保存数据

        2.4 细节处理

三、全部代码

        3.1 代码

        3.2 数据结果展示


一、工具介绍

语言:Python3

工具:PyCharm Community Edition 2022.1

二、实现过程

我这里爬取的是一年内地地震信息,不同的访问地址,获取数据的方式不同。

2.1 发送请求

//定义一个方法,用来获取中国地震台近一年数据的页面html文本内容
def get_one_page(page):
    try:
        url = "http://www.ceic.ac.cn/speedsearch?time=6&&page=%s" % (str(page))
        head = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"}
        data = requests.get(url, headers=head)
        //页面请求正常,放回文本内容
        return data
    except RequestException:
        print('爬取失败')

 2.2 lxml解析数据

def parse_one_page(html, ulist):
    # 创建bs对象 bs是使用的python默认的解析器,lxml也是解析器
    soup = BeautifulSoup(html.text, 'lxml')
    # find_all():可以根据标签名、属性、内容查找文档
    trs = soup.find_all('tr')
    i = 0
    for tr in trs:
        # 去掉第一个tr
        if i == 0:
            i += 1
        else:
            ui = []
            for td in tr:
                # print(td.string)
                ui.append(td.string)
            ulist.append(ui)
            i = i + 1

2.3 保存数据

def save_contents(ulist):
    # print(ulist)
    with open(r'最近一年全球地震情况.csv', 'w', encoding='utf-8-sig', newline='') as f:
        csv.writer(f).writerow(['发震时刻', '震级', '纬度(°)', '经度(°)', '深度(千米)', '参考位置'])
        for i in range(len(ulist)):
            csv.writer(f).writerow([ulist[i][3], ulist[i][1], ulist[i][5], ulist[i][7], ulist[i][9], ulist[i][11]])

 2.4 细节处理

有一个小细节就是页面的自动捕获,你可以重新发送一个请求来得到一共有页数

也可以通过请求的返回信息来确定。

因为时间原因我就没有去弄了,提供点思路吧

三、全部代码

3.1 代码


import requests
import csv
from bs4 import BeautifulSoup
from lxml import etree


# print(soup)
from requests import RequestException


def get_one_page(page):
    try:
        url = "http://www.ceic.ac.cn/speedsearch?time=6&&page=%s" % (str(page))
        head = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"}
        data = requests.get(url, headers=head)
        # print(data)
        return data
    except RequestException:
        print('爬取失败')


def parse_one_page(html, ulist):
    # 创建bs对象 bs是使用的python默认的解析器,lxml也是解析器
    soup = BeautifulSoup(html.text, 'lxml')
    # find_all():可以根据标签名、属性、内容查找文档
    trs = soup.find_all('tr')
    i = 0
    for tr in trs:
        # 去掉第一个tr
        if i == 0:
            i += 1
        else:
            ui = []
            for td in tr:
                # print(td.string)
                ui.append(td.string)
            ulist.append(ui)
            i = i + 1


def save_contents(ulist):
    # print(ulist)
    with open(r'最近一年全球地震情况.csv', 'w', encoding='utf-8-sig', newline='') as f:
        csv.writer(f).writerow(['发震时刻', '震级', '纬度(°)', '经度(°)', '深度(千米)', '参考位置'])
        for i in range(len(ulist)):
            csv.writer(f).writerow([ulist[i][3], ulist[i][1], ulist[i][5], ulist[i][7], ulist[i][9], ulist[i][11]])


def main(page):
    ulist = []
    for i in range(page):
        html = get_one_page(i+1)
        parse_one_page(html, ulist)
    save_contents(ulist)


if __name__ == '__main__':
    main(62)  # 需爬取的页数

3.2 数据结果展示

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值