新聞中心
Python爬蟲(chóng)是一種自動(dòng)化技術(shù),主要用于從互聯(lián)網(wǎng)上抓取數(shù)據(jù)。在進(jìn)行Python爬蟲(chóng)時(shí),我們通常需要將爬取到的數(shù)據(jù)存入數(shù)據(jù)庫(kù)中,以便進(jìn)一步處理和分析。數(shù)據(jù)入庫(kù)是Python爬蟲(chóng)的最后一步,也是最為關(guān)鍵的一步。本文將詳細(xì)介紹,包括數(shù)據(jù)清洗、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)讀取等。

一、Python爬蟲(chóng)數(shù)據(jù)清洗
在進(jìn)行Python爬蟲(chóng)時(shí),我們通常會(huì)面臨以下問(wèn)題:
1. 爬取到的數(shù)據(jù)格式不規(guī)范,需要進(jìn)行清洗。
2. 爬取的數(shù)據(jù)量太大,需要篩選出有價(jià)值的數(shù)據(jù)。
3. 爬取到的數(shù)據(jù)中包含大量垃圾信息,需要進(jìn)行過(guò)濾。
針對(duì)這些問(wèn)題,我們需要進(jìn)行數(shù)據(jù)清洗。數(shù)據(jù)清洗的主要任務(wù)是將爬蟲(chóng)爬取的原始數(shù)據(jù)進(jìn)行初步的處理和整理,使其能夠被后續(xù)的數(shù)據(jù)存儲(chǔ)程序正確地處理。具體包括以下幾個(gè)方面:
1. 字符串處理
在進(jìn)行數(shù)據(jù)清洗時(shí),我們通常需要對(duì)爬取到的字符串進(jìn)行處理。比如,我們需要去除字符串中的空格和換行符、將中文轉(zhuǎn)換為Unicode編碼等。
2. 數(shù)據(jù)類型轉(zhuǎn)換
在爬取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之前,我們需要將其轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)類型。比如,將字符串轉(zhuǎn)換為數(shù)字、日期等。
3. 數(shù)據(jù)篩選
爬蟲(chóng)數(shù)據(jù)中通常包含豐富的信息,但不是所有信息都是有價(jià)值的。因此,我們需要對(duì)爬取到的數(shù)據(jù)進(jìn)行篩選,只選擇敲質(zhì)量較高的數(shù)據(jù)。
4. 垃圾信息過(guò)濾
爬蟲(chóng)爬取的數(shù)據(jù)中往往包含大量垃圾信息,比如廣告信息、網(wǎng)絡(luò)用語(yǔ)等。這些信息對(duì)數(shù)據(jù)分析和處理都沒(méi)有任何幫助,因此我們需要將其過(guò)濾掉。
二、Python爬蟲(chóng)數(shù)據(jù)存儲(chǔ)
在將Python爬取的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中時(shí),我們需要確定數(shù)據(jù)庫(kù)類型、建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)、創(chuàng)建操作數(shù)據(jù)庫(kù)的程序等。數(shù)據(jù)存儲(chǔ)的過(guò)程包括以下幾個(gè)步驟:
1. 確定數(shù)據(jù)庫(kù)類型
在選擇數(shù)據(jù)庫(kù)時(shí),應(yīng)該根據(jù)具體的應(yīng)用場(chǎng)景選擇適當(dāng)?shù)臄?shù)據(jù)庫(kù)類型。常見(jiàn)的數(shù)據(jù)庫(kù)類型包括MySQL、Oracle、SQL Server、MongoDB等。
2. 建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)
在將爬取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之前,我們需要先建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)。數(shù)據(jù)庫(kù)表結(jié)構(gòu)的設(shè)計(jì)應(yīng)該根據(jù)需要存儲(chǔ)的數(shù)據(jù)類型進(jìn)行設(shè)計(jì)。
3. 創(chuàng)建操作數(shù)據(jù)庫(kù)的程序
在將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之前,我們需要先編寫程序,以便操作數(shù)據(jù)庫(kù)。該程序是將Python爬蟲(chóng)爬取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中的關(guān)鍵,需要保證程序的正確性和可靠性。
4. 數(shù)據(jù)存儲(chǔ)
在完成上述準(zhǔn)備工作之后,我們就可以將爬取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中了。存儲(chǔ)數(shù)據(jù)庫(kù)的方式包括以下幾種:
(1)使用SQL語(yǔ)句將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。
(2)使用ORM框架將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。
(3)使用NoSQL數(shù)據(jù)庫(kù)將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。
三、Python爬蟲(chóng)數(shù)據(jù)讀取
在將Python爬取的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中之后,我們需要對(duì)這些數(shù)據(jù)進(jìn)行讀取和處理。Python爬蟲(chóng)數(shù)據(jù)讀取的方式包括以下幾種:
1. 使用SQL語(yǔ)句進(jìn)行數(shù)據(jù)讀取,然后使用Python程序進(jìn)行處理。
2. 使用ORM框架進(jìn)行數(shù)據(jù)讀取和處理。
3. 直接使用NoSQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)讀取和處理。
無(wú)論選擇哪種方式進(jìn)行數(shù)據(jù)讀取,都需要保證讀取數(shù)據(jù)的正確性和可靠性,并能夠快速地讀取到有價(jià)值的數(shù)據(jù)。
本文介紹了,包括數(shù)據(jù)清洗、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)讀取等。數(shù)據(jù)入庫(kù)是Python爬蟲(chóng)的最后一步,對(duì)數(shù)據(jù)分析和處理具有極為重要的作用。在進(jìn)行Python爬蟲(chóng)時(shí),我們應(yīng)該注重?cái)?shù)據(jù)清洗和存儲(chǔ)的工作,并選擇適當(dāng)?shù)臄?shù)據(jù)讀取方式進(jìn)行數(shù)據(jù)處理。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
如何用python爬取豆瓣讀書(shū)的數(shù)據(jù)
我們通過(guò)bs4解析我們需要的檔友字段,如:出版時(shí)間,作者/譯者,豆瓣評(píng)分,售價(jià),評(píng)價(jià)人數(shù)等。
# 解析單個(gè)tag頁(yè)面下單頁(yè)的信息
def parse_tag_page(html):
try:
soup = BeautifulSoup(html,”lxml”)
tag_name = soup.select(‘title’).get_text().strip()
list_soup = soup.find(‘ul’, {‘class’: ‘subject-list’})
if list_soup == None:
print(‘獲取信息列表失敗’)
else:
for book_info in list_soup.findAll(‘div’, {‘class’: ‘info’}):
# 書(shū)名
title = book_info.find(‘a(chǎn)’).get(‘title’).strip()
# 評(píng)價(jià)人數(shù)
people_num = book_info.find(‘span’, {‘class’: ‘pl’}).get_text().strip()
# 出版信息,作者寬蠢含
pub = book_info.find(‘div’, {‘class’: ‘pub’}).get_text().strip()
pub_list = pub.split(‘/’)
try:
author_info = ‘作者/譯者: ‘ + ‘/’.join(pub_list)
except:
author_info = ‘作者/譯者: 暫無(wú)’
try:
pub_info = ‘出版信息: ‘ + ‘/’慎笑.join(pub_list)
except:
pub_info = ‘出版信息: 暫無(wú)’
try:
price_info = ‘價(jià)格: ‘ + ‘/’.join(pub_list)
except:
price_info = ‘價(jià)格: 暫無(wú)’
try:
rating_num= book_info.find(‘span’, {‘class’: ‘rating_nums’}).get_text().strip()
except:
rating_num = ‘0.0’
book_data = {
‘title’: title,
‘people_num’: people_num,
‘a(chǎn)uthor_info’: author_info,
‘pub_info’: pub_info,
‘price_info’: price_info,
‘rating_num’: rating_num
}
# return book_data
if book_data:
save_to_mongo(book_data,tag_name)
except:
print(‘解析錯(cuò)誤’)
return None
這兩天爬了豆瓣讀書(shū)的十萬(wàn)條左右的書(shū)目信息,用時(shí)將近一天,現(xiàn)在趁著這個(gè)空閑把代碼總結(jié)一下,還是菜鳥(niǎo),都是用的最簡(jiǎn)單最笨的方法,還請(qǐng)路過(guò)的大神不吝賜教。
之一步,先看一下我們需要的庫(kù):
import requests#用來(lái)請(qǐng)求網(wǎng)頁(yè)
from bs4 import BeautifulSoup#解析網(wǎng)頁(yè)
import time#設(shè)置延時(shí)時(shí)間,防止爬取過(guò)于頻繁被封IP號(hào)
import re#正則表達(dá)式庫(kù)
import pymysql#由于爬取的數(shù)據(jù)太多,我們要把他存入MySQL數(shù)據(jù)庫(kù)中,這個(gè)庫(kù)用于連接數(shù)據(jù)庫(kù)
import random#這個(gè)庫(kù)里用到了產(chǎn)生隨機(jī)數(shù)的randint函數(shù),和上面的time搭配,使爬取間隔時(shí)間隨機(jī)
這個(gè)是豆瓣的網(wǎng)址:x-sorttags-all
我們要從這里獲取所有分類的標(biāo)簽鏈接,進(jìn)一步去爬取里面的信息,代碼先貼上來(lái):
import requests
from bs4 import BeautifulSoup#導(dǎo)入庫(kù)
url=”httom/tag/?icn=index-nav”
wb_data=requests.get(url) #請(qǐng)求網(wǎng)址
soup=BeautifulSoup(wb_data.text,”lxml”) #解析網(wǎng)頁(yè)信息
tags=soup.select(“#content > div > div.article > div > div > table > tbody > tr > td > a”)
#根據(jù)CSS路徑查找標(biāo)簽信息,CSS路徑獲取方法,右鍵-檢查-copy selector,tags返回的是一個(gè)列表
for tag in tags:
tag=tag.get_text() #將列表中的每一個(gè)標(biāo)簽信息提取出來(lái)
helf=”hom/tag/”
#觀察一下豆瓣的網(wǎng)址,基本都是這部分加上標(biāo)簽信息,所以我們要組裝網(wǎng)址慶罩,用于爬取標(biāo)簽詳情頁(yè)
url=helf+str(tag)
print(url) #網(wǎng)址組裝完畢,輸出
以上我們便爬取了所有標(biāo)簽下的網(wǎng)址,我們將這個(gè)文件命名為channel,并在channel中創(chuàng)建一個(gè)channel字符串,放上我們所有爬取的網(wǎng)址信息,等下爬取詳情頁(yè)的時(shí)候直接從這里提取鏈接就好了,如下:
channel=”’
tag/程序
”’
現(xiàn)在,我們開(kāi)始第二個(gè)程序。
QQ圖片.png
標(biāo)簽頁(yè)下每一個(gè)圖片的信息基本都是這樣的,我們可以直接從這里提取到標(biāo)題,作者,出版社,出版時(shí)間,價(jià)格,評(píng)價(jià)人數(shù),以及評(píng)分等信息迅拍(有些外國(guó)作品還會(huì)有譯者信息),提取方法與提取標(biāo)簽類似,也是根據(jù)CSS路徑提取。
我們先用一個(gè)網(wǎng)址來(lái)實(shí)驗(yàn)爬取:
url=”htt/tag/科技”
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “l(fā)xml”)
tag=url.split(“?”).split(“/”) #從鏈接里面提取標(biāo)簽信息,方便存儲(chǔ)
detils=soup.select(“#subject_list > ul > li > div.info > div.pub”) #抓取作者,出版社信息,稍后我們用spite()函數(shù)再將他們分離出來(lái)
scors=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums”) #抓取評(píng)分信息
persons=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.pl”) #評(píng)價(jià)人數(shù)
titles=soup.select(“#subject_list > ul > li > div.info > h2 > a”) #書(shū)名
#以上抓取的都是我們需要的html語(yǔ)言標(biāo)簽信息,我們還需要將他們一一分離出來(lái)
for detil,scor,person,title in zip(detils,scors,persons,titles):
#用一個(gè)zip()函數(shù)實(shí)現(xiàn)一畝差羨次遍歷
#因?yàn)橐恍?biāo)簽中有譯者信息,一些標(biāo)簽中沒(méi)有,為避免錯(cuò)誤,所以我們要用一個(gè)try來(lái)把他們分開(kāi)執(zhí)行
try:
author=detil.get_text().split(“/”,4).split() #這是含有譯者信息的提取辦法,根據(jù)“/” 把標(biāo)簽分為五部分,然后依次提取出來(lái)
yizhe= detil.get_text().split(“/”, 4)
publish=detil.get_text().split(“/”, 4)
time=detil.get_text().split(“/”, 4).split().split(“-“) #時(shí)間我們只提取了出版年份
price=ceshi_priceone(detil)#因?yàn)閮r(jià)格的單位不統(tǒng)一,我們用一個(gè)函數(shù)把他們換算為“元”
scoe=scor.get_text() if True else “” #有些書(shū)目是沒(méi)有評(píng)分的,為避免錯(cuò)誤,我們把沒(méi)有評(píng)分的信息設(shè)置為空
person=ceshi_person(person) #有些書(shū)目的評(píng)價(jià)人數(shù)顯示少于十人,爬取過(guò)程中會(huì)出現(xiàn)錯(cuò)誤,用一個(gè)函數(shù)來(lái)處理
title=title.get_text().split()
#當(dāng)沒(méi)有譯者信息時(shí),會(huì)顯示IndexError,我們分開(kāi)處理
except IndexError:
try:
author=detil.get_text().split(“/”, 3).split()
yizhe=””#將detil信息劃分為4部分提取,譯者信息直接設(shè)置為空,其他與上面一樣
publish=detil.get_text().split(“/”, 3)
time=detil.get_text().split(“/”, 3).split().split(“-“)
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except (IndexError,TypeError):
continue
#出現(xiàn)其他錯(cuò)誤信息,忽略,繼續(xù)執(zhí)行(有些書(shū)目信息下會(huì)沒(méi)有出版社或者出版年份,但是數(shù)量很少,不影響我們大規(guī)模爬取,所以直接忽略)
except TypeError:
continue
#提取評(píng)價(jià)人數(shù)的函數(shù),如果評(píng)價(jià)人數(shù)少于十人,按十人處理
def ceshi_person(person):
try:
person = int(person.get_text().split()) – 4>)
except ValueError:
person = int(10)
return person
#分情況提取價(jià)格的函數(shù),用正則表達(dá)式找到含有特殊字符的信息,并換算為“元”
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
else:
price = price
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
else:
price = price
return price
實(shí)驗(yàn)成功后,我們就可以爬取數(shù)據(jù)并導(dǎo)入到數(shù)據(jù)庫(kù)中了,以下為全部源碼,特殊情況會(huì)用注釋一一說(shuō)明。
import requests
from bs4 import BeautifulSoup
import time
import re
import pymysql
from channel import channel #這是我們之一個(gè)程序爬取的鏈接信息
import random
def ceshi_person(person):
try:
person = int(person.get_text().split()) – 4>)
except ValueError:
person = int(10)
return person
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
else:
price = price
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
else:
price = price
return price
#這是上面的那個(gè)測(cè)試函數(shù),我們把它放在主函數(shù)中
def mains(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “l(fā)xml”)
tag=url.split(“?”).split(“/”)
detils=soup.select(“#subject_list > ul > li > div.info > div.pub”)
scors=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums”)
persons=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.pl”)
titles=soup.select(“#subject_list > ul > li > div.info > h2 > a”)
for detil,scor,person,title in zip(detils,scors,persons,titles):
l = #建一個(gè)列表,用于存放數(shù)據(jù)
try:
author=detil.get_text().split(“/”,4).split()
yizhe= detil.get_text().split(“/”, 4)
publish=detil.get_text().split(“/”, 4)
time=detil.get_text().split(“/”, 4).split().split(“-“)
price=ceshi_priceone(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except IndexError:
try:
author=detil.get_text().split(“/”, 3).split()
yizhe=””
publish=detil.get_text().split(“/”, 3)
time=detil.get_text().split(“/”, 3).split().split(“-“)
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except (IndexError,TypeError):
continue
except TypeError:
continue
l.append()
#將爬取的數(shù)據(jù)依次填入列表中
sql=”INSERT INTO allbooks values(%s,%s,%s,%s,%s,%s,%s,%s,%s)” #這是一條sql插入語(yǔ)句
cur.executemany(sql,l) #執(zhí)行sql語(yǔ)句,并用executemary()函數(shù)批量插入數(shù)據(jù)庫(kù)中
conn.commit()
#主函數(shù)到此結(jié)束
# 將Python連接到MySQL中的python數(shù)據(jù)庫(kù)中
conn = pymysql.connect( user=”root”,password=”123123″,database=”python”,charset=’utf8′)
cur = conn.cursor()
cur.execute(‘DROP TABLE IF EXISTS allbooks’) #如果數(shù)據(jù)庫(kù)中有allbooks的數(shù)據(jù)庫(kù)則刪除
sql = “””CREATE TABLE allbooks(
title CHAR(255) NOT NULL,
scor CHAR(255),
author CHAR(255),
price CHAR(255),
time CHAR(255),
publish CHAR(255),
person CHAR(255),
yizhe CHAR(255),
tag CHAR(255)
)”””
cur.execute(sql) #執(zhí)行sql語(yǔ)句,新建一個(gè)allbooks的數(shù)據(jù)庫(kù)
start = time.clock() #設(shè)置一個(gè)時(shí)鐘,這樣我們就能知道我們爬取了多長(zhǎng)時(shí)間了
for urls in channel.split():
urlss= #從channel中提取url信息,并組裝成每一頁(yè)的鏈接
for url in urlss:
mains(url)#執(zhí)行主函數(shù),開(kāi)始爬取
print(url)#輸出要爬取的鏈接,這樣我們就能知道爬到哪了,發(fā)生錯(cuò)誤也好處理
time.sleep(int(format(random.randint(0,9)))) #設(shè)置一個(gè)隨機(jī)數(shù)時(shí)間,每爬一個(gè)網(wǎng)頁(yè)可以隨機(jī)的停一段時(shí)間,防止IP被封
end = time.clock()
print(‘Time Usage:’, end – start) #爬取結(jié)束,輸出爬取時(shí)間
count = cur.execute(‘select * from allbooks’)
print(‘has %s record’ % count)#輸出爬取的總數(shù)目條數(shù)
# 釋放數(shù)據(jù)連接
if cur:
cur.close()
if conn:
conn.close()
這樣,一個(gè)程序就算完成了,豆瓣的書(shū)目信息就一條條地寫進(jìn)了我們的數(shù)據(jù)庫(kù)中,當(dāng)然,在爬取的過(guò)程中,也遇到了很多問(wèn)題,比如標(biāo)題返回的信息拆分后中會(huì)有空格,寫入數(shù)據(jù)庫(kù)中會(huì)出現(xiàn)錯(cuò)誤,所以只截取了標(biāo)題的之一部分,因而導(dǎo)致數(shù)據(jù)庫(kù)中的一些書(shū)名不完整,過(guò)往的大神如果有什么辦法,還請(qǐng)指教一二。
等待爬取的過(guò)程是漫長(zhǎng)而又欣喜的,看著電腦上一條條信息被刷出來(lái),成就感就不知不覺(jué)涌上心頭;然而如果你吃飯時(shí)它在爬,你上廁所時(shí)它在爬,你都已經(jīng)爬了個(gè)山回來(lái)了它還在爬時(shí),便會(huì)有點(diǎn)崩潰了,擔(dān)心電腦隨時(shí)都會(huì)壞掉(還是窮學(xué)生換不起啊啊啊啊~)
如何通過(guò)python操作xampp里面的MySQL數(shù)據(jù)庫(kù)
您好,
import
MySQLdb
try:
conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,port=3306)
cur=conn.cursor()
conn.select_db(‘python’)
count=cur.execute(‘瞎脊select *
from test’磨仿滲)
‘there has %s rows record’ % count
result=cur.fetchone()
result
‘ID: %s info %s’ % result
results=cur.fetchmany(5)
for r in results:
r
‘==’*10
cur.scroll(0,mode=’absolute’)
results=cur.fetchall()
for r in results:
r
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
“Mysql Error %d: %s”大握 % (e.args, e.args)python爬蟲(chóng)導(dǎo)入數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于python爬蟲(chóng)導(dǎo)入數(shù)據(jù)庫(kù),Python爬蟲(chóng)的數(shù)據(jù)入庫(kù)操作,如何用python爬取豆瓣讀書(shū)的數(shù)據(jù),如何通過(guò)python操作xampp里面的MySQL數(shù)據(jù)庫(kù)的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開(kāi)通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問(wèn)快、穩(wěn)定!
文章標(biāo)題:Python爬蟲(chóng)的數(shù)據(jù)入庫(kù)操作(python爬蟲(chóng)導(dǎo)入數(shù)據(jù)庫(kù))
網(wǎng)站鏈接:http://www.dlmjj.cn/article/cocihpe.html


咨詢
建站咨詢
