家好,我是皮皮。
還是昨天的那個網絡爬蟲問題,大佬們,幫忙看看這個網絡爬蟲代碼怎么修改?那個粉絲說自己不熟悉pandas,用pandas做的爬蟲,雖然簡潔,但是自己不習慣,想要在他自己的代碼基礎上進行修改,獲取數據的代碼已經寫好了,就差存儲到csv中去了。
他的原始代碼如下:
import requests
from lxml import etree
import csv
import time
import pandas as pd
def gdpData(page):
url=f'https://www.hongheiku.com/category/gdjsgdp/page/{page}'
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
resp=requests.get(url,headers=headers)
# print(resp.text)
data(resp.text)
file=open('data.csv',mode='a',encoding='utf-8',newline='')
csv_write=csv.DictWriter(file,fieldnames=['排名','地區','GDP','年份'])
csv_write.writeheader()
def data(text):
e=etree.HTML(text)
lst=e.xpath('//*[@id="tablepress-48"]/tbody/tr[@class="even"]')
for l in lst:
no=l.xpath('./td[1]/center/span/text()')
name=l.xpath('./td[2]/a/center/text()')
team=l.xpath('./td[3]/center/text()')
year=l.xpath('./td[4]/center/text()')
data_dict={
'排名':no,
'地區':name,
'GDP':team,
'年份':year
}
print(f'排名:{no} 地區:{name} GDP:{team} 年份:{year} ')
csv_write.writerow(data_dict)
file.close()
url='https://www.hongheiku.com/category/gdjsgdp'
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
resp=requests.get(url,headers=headers)
# print(resp.text)
data(resp.text)
e=etree.HTML(resp.text)
#//*[@id="tablepress-48"]/tbody/tr[192]/td[3]/center
count=e.xpath('//div[@class="pagination pagination-multi"][last()]/ul/li[last()]/span/text()')[0].split(' ')[1]
for index in range(int(count) - 1):
gdpData(index + 2)
這里粉絲給了一瓶冰紅茶的費用,一個熱心市民給了一份代碼,在他的代碼基礎上進行修改的,代碼如下:
import requests
from lxml import etree
import csv
import time
import pandas as pd
def gdpData(page):
url=f'https://www.hongheiku.com/category/gdjsgdp/page/{page}'
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
resp=requests.get(url,headers=headers)
# print(resp.text)
data(resp.text)
def data(text):
file=open('data.csv', mode='a', encoding='utf-8', newline='')
csv_write=csv.DictWriter(file, fieldnames=['排名', '地區', 'GDP', '年份'])
csv_write.writeheader()
e=etree.HTML(text)
lst=e.xpath('//*[@id="tablepress-48"]/tbody/tr[@class="even"]')
for l in lst:
no=''.join(l.xpath('./td[1]/center/span/text()'))
name=''.join(l.xpath('./td[2]/a/center/text()')[0])
team=''.join(l.xpath('./td[3]/center/text()'))
year=''.join(l.xpath('./td[4]/center/text()'))
data_dict={
'排名':no,
'地區':name,
'GDP':team,
'年份':year
}
print(f'排名:{no} 地區:{name} GDP:{team} 年份:{year} ')
csv_write.writerow(data_dict)
file.close()
url='https://www.hongheiku.com/category/gdjsgdp'
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
resp=requests.get(url,headers=headers)
# print(resp.text)
data(resp.text)
e=etree.HTML(resp.text)
#//*[@id="tablepress-48"]/tbody/tr[192]/td[3]/center
count=e.xpath('//div[@class="pagination pagination-multi"][last()]/ul/li[last()]/span/text()')[0].split(' ')[1]
for index in range(int(count) - 1):
gdpData(index + 2)
代碼運行之后,數據就存儲到csv中去了。
順利地解決了粉絲的問題!
大家好,我是皮皮。這篇文章主要盤點了一個Python網絡爬蟲后數據存儲的問題,文中針對該問題,給出了具體的解析和代碼實現,幫助粉絲順利解決了問題。
最后感謝粉絲【藍桉】提問,感謝【熱心市民】給出的思路和代碼解析,感謝【eric】等人參與學習交流。
天學習python的CSV文件內容轉換為HTML輸出,并記錄學習過程歡迎大家一起交流分享。
首先看我桌面的person_info.csv文件,內容如下:
接下來新建一個python文件命名為py3_csv2html.py,在這個文件中進行操作代碼編寫:
import csv ####將csv文件中的名字列提出來顯示到html中 #定義html輸出變量 html_output='' #定義list列表存放名字 names=[] encode='UTF-8 sig' with open('person_info.csv','r',encoding=encode) as csv_file: csv_data=csv.reader(csv_file) #根據上圖數據的格式,我們不需要 #標題頭和第一行非正常數據 #使用next()跳過去 #next()方法以后學會說到 #可以看下面的截圖就明白了 next(csv_data) next(csv_data) for line in csv_data: #將文件中名字添加到names中去 #這里使用fstring代替了string的format方式 names.append(f"{line[0]}") html_output +=f"<p>文件中一共有{len(names)}個人。</p>" html_output +="\n<ul>" for name in names: html_output +=f"\n\t<li>{name}</li>" html_output +="\n</ul>" print(html_output) #*****以上使用csv的reader方式實現***** #大家可以根據上一篇文章中csv的第二種DictReader() #方式實現如上功能,這里就不做演示了。
解析person_info.csv中的數據,得到如下圖:
這里我們不需要表頭和第一行壞數據,所以使用兩次next()。
以上代碼運行得到的結果圖:
今天初學python的CSV文件內容轉換為HTML輸出就到這里!
關注公號yale記
下面的是我的公眾號二維碼圖片,歡迎關注。
資源鏈接:han-link.cn/4240.html
#妙筆生花創作挑戰#
*請認真填寫需求信息,我們會在24小時內與您取得聯系。