豆瓣電子書

2021-10-04 18:40:14 字數 4602 閱讀 6404

import requests

import urllib.request

from bs4 import beautifulsoup

import csv

'''目標資料:

書名作者

日期**

評分評價人數

'''headers =

key =

"**"

key_ascii = urllib.request.quote(key)

book_name_list =

user_name =

book_time =

book_pice =

pm_number_list =

people_number_list =

all_book =

# for page in range(0,60,20): # 3頁資料 由於不可抗拒因數 ,不需要獲取太數(注:(0,1000,20) 為全部資料)

# link = ""+str(key_ascii)+"?start={}&type=t".format(page)

# resp = requests.get(url=link,headers=headers)

# print(resp.status_code)

# html = resp.text

# 優化

# for page in range(0,51):

# link = "" + str(key_ascii) + "?start="+str(page * 20)+"&type=t"

# resp = requests.get(url=link,headers=headers)

# print("第"+str(page)+"頁狀態響應碼:",resp.status_code)

# 由於不可抗拒因數 ,不需要獲取太數

for page in

range(0

,5):

# 這裡獲取5頁資料

link =

""+str

(key_ascii)

+"?start="

+str

(page *20)

+"&type=t"

resp = requests.get(url=link,headers=headers)

print

("\n第"

+str

(page)

+"頁狀態響應碼:"

,resp.status_code)

# 確定 url 及響應狀態碼

html = resp.text

soup = beautifulsoup(html,

'html.parser'

)# 進行資料轉換

# 確定元素 變化規律 使用 for 來完成這個規律

for i in

range(1

,21):

# 書名 獲取

book_name = soup.select(

"#subject_list > ul > li:nth-child("

+str

(i)+

") > div.info > h2 > a"

)#subject_list > ul > li:nth-child(7) > div.info > h2 > a

#subject_list > ul > li:nth-child(2) > div.info > h2

for book_name in book_name:

# print(book_name.get_text().replace("\n", "").replace(" ", ""))

).replace(

"\n",""

).replace(

" ","")

)# 正常 1 頁 20 條資料,但有異常

# 此方法解決了 某頁資料 不足 20

# 書籍資訊(作者,出版時間,**)

book_user = soup.select(

"#subject_list > ul > li:nth-child("

+str

(i)+

") > div.info > div.pub"

)for book_user in book_user:

# print(book_user.get_text().replace("\n","").replace(" ",""))

book_user = book_user.get_text(

).replace(

"\n",""

).replace(

" ","")

.replace(

"元","")

book_user_list = book_user.split(

"/")

# 提取全部資料(作者,出版時間,**) 清洗資料

# 異常解決

iflen

(book_user_list)

>=4:

# 解決 某些書籍 沒有這些東西0]

)# 作者-2

])# 出版日期-1

])# **

else:0

])# 作者

"空")

# 出版日期

"空")

# **

# book_name = book_name[0].get_text()

# print(book_name.replace("\n","").replace(" ",""))

# 方法 2

# 評分數 評價人數 資料的獲取

pm_number = soup.select(

"#subject_list > ul > li:nth-child("

+str

(i)+

") > div.info > div.star.clearfix > span.rating_nums"

) people_number = soup.select(

"#subject_list > ul > li:nth-child("

+str

(i)+

") > div.info > div.star.clearfix > span.pl"

)for pm_number in pm_number:

# print(pm_number.get_text())))

for people_number in people_number:

# print(people_number.get_text().replace(" ","").replace("\n","").replace("(","").replace(")",""))

).replace(

" ","")

.replace(

"\n",""

).replace(

"(","")

.replace(

"人評價)",""

))# print(book_name_list)

# print(user_name)

# print(book_time)

# print(book_pice)

# print(pm_number_list)

# print(people_number_list)

# 存入定義好的空列表 ,以字典的方式存入

# for i in range(0,len(user_name)):

#

# )

# # 此時是 列表包含 len (book_time) 個 字典

# # 每乙個字典 包含一本書的 爬取的 所有資訊

## print(all_book)

# 因為存入 csv 格式的檔案也需要用到了字典 這上面這一步就 pass

file_path =

"c:/users/dell/desktop/python_wd/文字資訊/豆瓣**.csv"

with

open

(file_path,

"w",newline=

"",encoding=

"utf-8"

)as f:

file_value_names =

["書名"

,"作者"

,"出版日期"

,"**(元)"

,"評分"

,"評價人數"

]# 設定表頭

f_csv = csv.dictwriter(f,fieldnames=file_value_names)

# 採用字典的形式 存入

f_csv.writeheader(

)# 寫入表頭

# 寫入行

for i in

range(0

,len

(user_name)):

f_csv.writerow(

# 注意這裡

)print

("\n資料儲存完畢。。。。。。"

)

電子書收藏

以下是我蒐集的電子書備份。1.網路硬體 完整版 日 三輪賢一 著,盛榮 譯 人民郵電出版社 2015年8月第1版 2.python學習手冊 第4版 mark lutz 著 李軍 劉紅偉 等譯 機械工業出版社 2011年4月第1版 3.android軟體安全與逆向分析 豐生強著 人民郵電出版社 201...

開源電子書

語言相關類 讀書筆記及其它 測試相關 智慧型系統git 簡易指南 猴子都能懂的git入門 git 參考手冊 pro git pro git 中文版 整理在gitbook上 git magic gotgithub git權威指南 git community book 中文版 mercurial 使用教...

電子書 看看

效能方面 net performance testing and optimization net效能測試和優化,還沒細看。pro.net performance net效能介紹,介紹的很全面。但部分內容與clr via c 有重疊。asp.net mvc,html方面 asp.net mvc 4 ...