使用python爬取國內油價資料

2021-10-07 17:47:53 字數 4181 閱讀 6280

爬取 國內油價資料,並存入資料庫,存入資料庫的表名以 oil+當天日期命名。

1.chrome瀏覽器輸入**,檢視網頁的源**

2.觀察所需爬取的資料在源**中的位置,發現所需資料被包圍在table內

以開頭

以結尾

3.搜尋,發現只有一處匹配,符合爬取條件

4.獲取到table內的資料後,再獲取table內每個內的資料

5.通過迴圈獲取內每個內的資料,儲存為乙個列表

6.最後存入資料庫即可

###方法說明:

commom.mysql_common.py:使用python操作mysql資料庫的方法封裝;

common.table_name.py:命名資料庫表名;

commom.mysql_common.py
# -*- coding: utf-8 -*-

from pymysql import *

import pymysql

class mysql:

def __init__(self, host, port, user, password, db, charset='utf8'):

self.host = host

self.port = port

self.db = db

self.user = user

self.password = password

self.charset = charset

def connectsql(self):

self.conn = connect(host=self.host,

port=self.port,

user=self.user,

passwd=self.password,

db=self.db,

charset=self.charset)

self.cursor = self.conn.cursor(pymysql.cursors.dictcursor)

def closesql(self):

self.cursor.close()

self.conn.close()

def execute(self, sql):

try:

self.connectsql()

self.cursor.execute(sql)

data = self.cursor.fetchall()

print(data)

self.conn.commit()

self.closesql()

except exception as e:

print(e)

common.table_name.py
# -*- coding: utf-8 -*-

import time

import re

# 表名稱

def table_name():

date_time = time.strftime("%y-%m-%d", time.localtime())

data = re.split(r'-', date_time)

name = "oil" + data[0] + data[1] + data[2]

return name

push_data_to_mysql.py

parse_data:對html資料進行解析,獲取到所需資料存入乙個列表並返回

create:mysql建立乙個**,用來存入資料(**名為 oil+當天年月日)

insert:將資料插入建立的**

# -*- coding: utf-8 -*-

import requests

import re

from common.mysql_common import mysql

from common.table_name import table_name

class pushoildatatomysql:

def __init__(self):

self.html = self.get_html_text()

self.oil_data = self.parse_data()

self.name = table_name()

self.do_mysql = mysql('localhost', 3306, 'root', '123456', 'myoildata')

@staticmethod

def get_html_text():

url = ''

try:

r = requests.get(url, timeout=30)

r.raise_for_status()

return r.text

except:

return ""

def parse_data(self):

oil_data =

try:

# 獲取結尾的資料

# 匹配規則, re.s 是因為「.」的作用是匹配除「\n」以外的任何字元, 而在html中有很多"\n"

rule_table = '\r\n(.*?)'

html_data = re.findall(rule_table, self.html, re.s)

# 獲取開頭到結尾的資料,所有城市的內容

# 匹配規則

rule_tr = '\r\n(.*?)'

citys_data = re.findall(rule_tr, html_data[0], re.s) # data_list 為匹配的城市資料

for i in range(1, len(citys_data)):

city_data = citys_data[i]

# 匹配規則

rule_city_detail = '(.*?)'

city_detail_data = re.findall(rule_city_detail, city_data, re.s)

area = city_detail_data[0].split('>')[1].split("<")[0]

oil89 = eval(city_detail_data[1])

oil92 = eval(city_detail_data[2])

oil95 = eval(city_detail_data[3])

oil98 = eval(city_detail_data[4])

oil0 = eval(city_detail_data[5])

update_time = city_detail_data[6]

except:

print("獲取油價資料失敗")

return oil_data

def create(self):

sql_create_table = 'create table `%s`(id int auto_increment,`area` varchar(20),`oil89` varchar(20),`oil92` varchar(20),`oil95` varchar(20),`oil98` varchar(20), `oil0` varchar(20), `update_time` varchar(255), primary key(id))' % self.name

self.do_mysql.execute(sql_create_table)

def insert(self):

for i in range(len(self.oil_data)):

sql_insert = 'insert into %s(area, oil89, oil92, oil95, oil98, oil0, update_time) value%s' % (self.name, self.oil_data[i])

self.do_mysql.execute(sql_insert)

if __name__ == '__main__':

test = pushoildatatomysql()

test.create()

test.insert()

python爬取基金 Python 爬基金資料

coding utf 8 importjsonimportrequestsfrom lxml importetreefrom htmlparser importhtmlparserfrom pymongo importmongoclient client mongoclient localhost ...

python爬蟲爬取nn online的資料

寫乙個爬蟲爬取nn online.org的np散射的pwa93的各分波的理論值 需要先安裝python3,python pip3,selenium,geckodriver python crawler 如下 wang jianfeng dec 14 2018 python3 install sele...

python動態爬取知乎 python爬取微博動態

在初學爬蟲的過程中,我們會發現很多 都使用ajax技術動態載入資料,和常規的 不一樣,資料是動態載入的,如果我們使用常規的方法爬取網頁,得到的只是一堆html 沒有任何的資料。比如微博就是如此,我們可以通過下滑來獲取更多的動態。對於這樣的網頁該如何抓取呢?我們以微博使用者動態為例,抓取某名使用者的文...