記事のディレクトリ
プロジェクト
プロジェクトの完了には7日かかり、ページは6つの機能で実装されます。左上と下の機能は 地域のリスク評価 と 今日 の Baidu検索であり、2つの機能の真ん中は 合計データ表示 と リアルタイムデータです。マップの 上下の機能は、2つの 州の累積確認済みランキングで あり、 今日の発生は統計州 で発生します。これらのデータのソースは、爬虫類を介して各サイトをクロールし、合計3つのサイトをクロールします。次に、Takeに登る方法を示します。これらの6つの関数のデータソースを作成し、すべての人が自分のプロジェクトにコピーして学習できるようにソースコードを添付します。
Pythonクローラー
PythonクローラーがNetEaseニュースの流行データをクロールする
NetEaseニュースの流行データをクロールするURLは次のとおりです。https://wp.m.163.com/163/page/news/virus_report/index.html?nw = 1&anw = 1、このURLはjsonファイルデータを返します、F12のネットワークで表示できます。jsonファイルを処理してcsvファイルに変換すると非常に便利です。コードは次のように表示されます。
NetEaseニュースの流行データをcsvファイルにクロールします。
import pandas as pd
import requests
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
}
url='https://c.m.163.com/ug/api/wuhan/app/data/list-total?'
res=requests.get(url,headers=headers)
import json
data_json=json.loads(res.text)
data=data_json['data']
data_province=data['areaTree'][2]['children']
print(data_province)
free_data=pd.DataFrame(data_province)[['id','lastUpdateTime','name']]
today_data=pd.DataFrame([province['today'] for province in data_province])
total_data=pd.DataFrame([province['total'] for province in data_province])
today_data.columns=("today_"+i for i in today_data.columns)
total_data.columns=("total_"+i for i in total_data.columns)
China_data=pd.concat([free_data,today_data,total_data],axis=1)
import time
# file_name='今天中国各省'+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
file_name='C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/china_today_data'+'.csv'
China_data.to_csv(file_name,index=None,encoding='utf_8_sig')
print("中国的各省疫情数据保存成功啦!")
コードのアイデアは、ウェブページから返されたjsonデータを取得することであり、Pythonクラスを使用してデータを処理し、必要なデータを取得します。
次に、csvファイルデータをmysqlにインポートします。
import pymysql
import csv
import codecs
def get_conn():
conn = pymysql.connect(host='localhost', port=3307, user='root', passwd='123456', db='china_covid-19', charset='utf8')
return conn
def insert(cur, sql, args):
cur.execute(sql, args)
def read_csv_to_mysql(filename):
with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
reader = csv.reader(f)
head = next(reader)
conn = get_conn()
cur = conn.cursor()
sql = 'insert into china_today_data values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
cur.execute("Delete from china_today_data where 1=1")
conn.commit()
for item in reader:
args = tuple(item)
insert(cur, sql=sql, args=args)
conn.commit()
cur.close()
conn.close()
if __name__ == '__main__':
read_csv_to_mysql('C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/china_today_data.csv')
NetEaseニュースの流行データの私のmysqlテーブル構造:
China Today Epidemic Data Tableの構造は次のとおりです。合計18フィールドで、各フィールドタイプはvarcharです。その理由は、csvファイルからmysqlに転送するプロセスがデフォルトでvarcharの形式であるためです。
Pythonクローラーは、さまざまな地域のリスク評価データをクロールします
各地域のリスク評価レベルをクロールするウェブサイトは次のとおりです。http://www.gd.gov.cn/gdywdt/zwzt/yqfk/content/post_3021711.html、このウェブサイトのインターフェースは安定しており、変更されていません。ウェブサイトのデータを安定してクロールできます。コードは次のとおりです。
さまざまな地域でのリスク評価データのクロール
#Python爬取中高风险地区名单代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
def getHTML(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def getContent(url):
html = getHTML(url)
soup = BeautifulSoup(html, 'html.parser')
paras_tmp = soup.select('.zw-title')+soup.select('p')
paras = paras_tmp[0:]
return paras
def saveFile(text):
# datetimes = time.strftime("%Y-%m-%d",time.localtime(time.time()))
fname = "C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/"+r"Webdata.txt"
f = open(fname, 'w')
for t in text:
if len(t) > 0:
f.writelines(t.get_text() + "\n\n")
f.close()
def saveCSV(name,list):
test = pd.DataFrame(columns=name, data=list) # 数据有三列,列名分别为one,two,three
# datetimes = time.strftime("%Y-%m-%d", time.localtime(time.time()))
fname = "C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/"+r"list_of_grade_risk_areas.csv"
test.to_csv(fname, encoding='utf-8')
def main():
url = 'http://www.gd.gov.cn/gdywdt/zwzt/yqfk/content/mpost_3021711.html'
text = getContent(url)
saveFile(text)
# 打开文本文件
fp = open('C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/Webdata.txt', 'r')
# 使用readlines读取
lines = fp.readlines()
ss2 = []
for line in lines:
# 将读取的每行内容过滤掉换行符,如果不加这个条件,输入的内容中将会添加换行符\n
line = line.strip('\n')
line = line.strip('\u3000')
ss = line.split('\n') # 将每行内容根据=分割
if(ss != ['']):
ss2.append(ss)
while [] in ss2:
ss2.remove([''])
ss2.pop()
name=['title','high_risk_areas','high_areas','low_risk_areas','low_areas']
new_ss2=[];
list=[];
for i in range(0,len(ss2)):
new_ss2.append(ss2[i][0])
list.append(new_ss2)
saveCSV(name,list)
fp.close()
main()
クローラーのアイデアは、Webページに表示されているすべてのHTMLコンテンツを直接クロールし、そこから必要なフィールドを除外することです。フィルタリングされたフィールドをtxtファイルに保存してから、txtファイルからデータを読み取り、csvファイルに転送します。
次に、csvファイルデータをmysqlにインポートします。
import pymysql
import csv
import codecs
def get_conn():
conn = pymysql.connect(host='localhost', port=3307, user='root', passwd='123456', db='china_covid-19', charset='utf8')
return conn
def insert(cur, sql, args):
cur.execute(sql, args)
def read_csv_to_mysql(filename):
with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
reader = csv.reader(f)
head = next(reader)
conn = get_conn()
cur = conn.cursor()
sql = 'insert into list_of_grade_risk_areas values(%s,%s,%s,%s,%s,%s)'
cur.execute("Delete from list_of_grade_risk_areas where 1=1")
conn.commit()
for item in reader:
args = tuple(item)
insert(cur, sql=sql, args=args)
conn.commit()
cur.close()
conn.close()
if __name__ == '__main__':
read_csv_to_mysql('C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/list_of_grade_risk_areas.csv')
さまざまな地域でのリスク評価のMymysqlテーブル構造:
上記は、クローラーを使用してさまざまな地域のリスク評価をクロールし、クローラーのクロールデータを記録し、データをcsvファイルに変換してmysqlに保存するプロセスです。あなたに少しの助けがあり、一生懸命働き、一緒に進歩することを願っています!
Pythonクローラーが今日Baiduのホット検索リストをクロールします
次のようにBaiduホット検索リストをクロールしましょう:http://top.baidu.com/buzz?b = 1&fr =20811。このWebサイトのインターフェイスは安定しており、変更されていません。プログラムを1回作成するだけで、データを安全にクロールできます。 。。コードは次のように表示されます。
Baiduのホット検索リストデータをcsvファイルにクロールします。
# 爬取百度热搜榜数据放入csv文件中
# 导入相关库
from bs4 import BeautifulSoup
import pandas as pd
import requests
import time
def get_html(url, headers):
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding
return r.text
def get_pages(html):
soup = BeautifulSoup(html, 'html.parser')
all_topics = soup.find_all('tr')[1:]
data=[];
for each_topic in all_topics:
topic_times = each_topic.find('td', class_='last') # 搜索指数
topic_rank = each_topic.find('td', class_='first') # 排名
topic_name = each_topic.find('td', class_='keyword') # 标题目
if topic_rank != None and topic_name != None and topic_times != None:
topic_rank = each_topic.find('td', class_='first').get_text().replace(' ', '').replace('\n', '')
topic_name = each_topic.find('td', class_='keyword').get_text().replace(' ', '').replace('\n', '')
topic_times = each_topic.find('td', class_='last').get_text().replace(' ', '').replace('\n', '')
# print('排名:{},标题:{},热度:{}'.format(topic_rank,topic_name,topic_times))
tplt = "排名:{0:^4} 标题:{1:{3}^15} 热度:{2:^8}"
data.append(tplt.format(topic_rank, topic_name, topic_times, chr(12288)))
test = pd.DataFrame(columns=['news'], data=data) # 数据有三列,列名分别为one,two,three
# datetimes = time.strftime("%Y-%m-%d", time.localtime(time.time()))
# fname = "./" + datetimes + r"baidu_hot_search.csv"
fname = "C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/" + r"baidu_hot_search.csv"
test.to_csv(fname, encoding='utf-8')
def main():
# 百度热点排行榜单链接
url = 'http://top.baidu.com/buzz?b=1&fr=20811'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'}
html = get_html(url, headers)
get_pages(html)
if __name__ == '__main__':
main()
コードのアイデアは、最初にWebページ上のデータをクロールし、それをjson形式に変換してから、json形式のデータをcsvファイルにダンプすることです.csvファイルをmysqlに簡単にインポートして、csvファイルを作成することができますデータはmysqlデータベースデータに直接変更できます。
次に、csvファイルデータをmysqlにインポートします。
#将csv文件导入到mysql中
import pymysql
import csv
import codecs
def get_conn():
conn = pymysql.connect(host='localhost', port=3307, user='root', passwd='123456', db='china_covid-19', charset='utf8')
return conn
def insert(cur, sql, args):
cur.execute(sql, args)
def read_csv_to_mysql(filename):
with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
reader = csv.reader(f)
head = next(reader)
conn = get_conn()
cur = conn.cursor()
sql = 'insert into baidu_hot_search values(%s,%s)'
cur.execute("Delete from baidu_hot_search where 1=1")
conn.commit()
for item in reader:
args = tuple(item)
insert(cur, sql=sql, args=args)
conn.commit()
cur.close()
conn.close()
if __name__ == '__main__':
read_csv_to_mysql('C:/Users/DELL/Desktop/machine_learning/COVID-19_crawler/baidu_hot_search.csv')
私のBaiduホット検索リストのmysqlテーブル構造:
これまで、Baiduのホット検索リストのデータをクロールしてcsvファイルに入れるクローラーの作成を紹介しました。また、csvファイルデータをmysqlに保存する方法も紹介しました。mysqlテーブル構造は私のものと同じように構築されています。データのインポートを実現します。そうでない場合は、インポートできるようにコードを変更する必要があります。私があなたを助けることができることを願っています、読んでくれてありがとう!
総括する:
この記事では、クローラーを使用してWebページデータをクロールし、それをmysqlデータベースに配置する方法を紹介します。中国の新しいクラウンエピデミックビッグデータディスプレイシステム私はバックエンドにphpを使用し、フロントエンドにjquery + Echartsを使用して大画面表示を行い、ajaxをフロントエンドとバックエンドの相互作用に使用しています。上記のコードは、必要なデータにクロールするのに十分であり、バックエンドを実現するためにJAVAを選択することもできます。データはオイルです。オイルを使用すると、自分で車を作ることができます。この記事がお役に立てば幸いです。私はダークホースのジャックです。プログラミングの道にあるすべての障害を克服し、前進し続けます。
-ブラックホースジャック