本文目錄一覽:
- 1、學python推薦的10本豆瓣高分書單,小白到大佬,沒看過太可惜了
- 2、如何用python爬取豆瓣top250
- 3、如何用python去爬豆瓣圖書
- 4、豆瓣讀書數據分析-python
- 5、如何用python爬取豆瓣讀書的數據
學python推薦的10本豆瓣高分書單,小白到大佬,沒看過太可惜了
前言:我自己整理了幾本書籍的電子檔,需要的可以私信我 “書籍” 免費領取
本書一共12章,每一章都會用一個完整的 遊戲 來演示其中的關鍵知識點,並通過編寫好玩的小軟件這種方式來學習編程,引發讀者的興趣,降低學習的難度。每章最後都會對該章的知識點進行小結,還會給出一些小練習讓讀者試試身手。作者很巧妙的將所有編程知識嵌入到了這些例子中,真正做到了寓教於樂。
《Python編程初學者指南》內容淺顯易懂,示例輕鬆活潑,是國際暢銷的Python初學者教程,適合對Python感興趣的初級和中級讀者。
二,Python編程快速上手
本書是一本面向實踐的Python編程實用指南。這本書不僅是介紹Python語言的基礎知識,而且還通過項目實踐教會讀者如何應用這些知識和技能。 書的首部分介紹了基本Python編程概念,第二部分介紹了一些不同的任務,通過編寫Python程序,可以讓計算機自動完成它們。第二部分的每一章都有一些項目程序,供讀者學習。每章的末尾還提供了一些習題和深入的實踐項目,幫助讀者鞏固所學的知識。附錄部分提供了所有習題的解答。
本書適合缺乏編程基礎的初學者。通過閱讀本書,讀者將能利用強大的編程語言和工具,並且會體會到Python編程的快樂。
三,Python編程快速上手(第2版)
在本書中,你將學習利用Python編程在幾分鐘內完成手動需要幾小時的工作,無須事先具備編程經驗。通過閱讀本書,你會學習Python的基本知識, 探索 Python豐富的模塊庫,並完成特定的任務(例如,從網站抓取數據,讀取PDF和Word文檔等)。本書還包括有關輸入驗證的實現方法,以及自動更新CSV文件的技巧。一旦掌握了編程的基礎知識,你就可以毫不費力地創建Python程序,自動化地完成很多繁瑣的工作,包括:
① 在一個文件或多個文件中搜索並保存同類文本;
② 創建、更新、移動和重命名成百上千個文件和文件夾;
③ 下載搜索結果和處理Web在線內容;
④ 快速地批量化處理電子表格;
⑤ 拆分、合併PDF文件,以及為其加水印和加密;
⑥ 向特定人群發送提醒郵件和文本通知;
⑦ 同時裁剪、調整、編輯成千上萬張圖片。
四,Python編程
本書是一本針對所有層次的Python 讀者而作的Python 入門書。全書分兩部分:第一部分介紹用Python 編程所必須了解的基本概念,包括matplotlib、NumPy 和Pygal 等強大的Python 庫和工具介紹,以及列表、字典、if 語句、類、文件與異常、代碼測試等內容;第二部分將理論付諸實踐,講解如何開發三個項目,包括簡單的Python 2D 遊戲 開發如何利用數據生成交互式的信息圖,以及創建和定製簡單的Web 應用,並幫讀者解決常見編程問題和困惑。
五,Python編程(第2版)
本書是針對所有層次Python讀者而作的Python入門書。全書分兩部分:第一部分介紹用Python編程所必須了解的基本概念,包括Matplotlib等強大的Python庫和工具,以及列表、字典、if語句、類、文件與異常、代碼測試等內容;第二部分將理論付諸實踐,講解如何開發三個項目,包括簡單的2D 遊戲 、利用數據生成交互式的信息圖以及創建和定製簡單的Web應用,並幫助讀者解決常見編程問題和困惑。
第2版進行了全面修訂,簡化了Python安裝流程,新增了f字符串、get()方法等內容,並且在項目中使用了Plotly庫以及新版本的Django和Bootstrap,等等。
六,Python深度學習
本書由Keras之父、現任Google人工智能研究員的弗朗索瓦•肖萊(François Chollet)執筆,詳盡介紹了用Python和Keras進行深度學習的 探索 實踐,涉及計算機視覺、自然語言處理、生成式模型等應用。書中包含30多個代碼示例,步驟講解詳細透徹。由於本書立足於人工智能的可達性和大眾化,讀者無須具備機器學習相關背景知識即可展開閱讀。在學習完本書後,讀者將具備搭建自己的深度學習環境、建立圖像識別模型、生成圖像和文字等能力。
七,Python極客項目編程
本書包含了一組富有想象力的編程項目,它們將引導你用Python 來製作圖像和音樂、模擬現實世界的現象,並與Arduino 和樹莓派這樣的硬件進行交互。你將學習使用常見的Python 工具和庫,如numpy、matplotlib 和pygame等等。
八,Python神經網絡編程
本書揭示神經網絡背後的概念,並介紹如何通過Python實現神經網絡。全書分為3章和兩個附錄。第1章介紹了神經網絡中所用到的數學思想。第2章介紹使用Python實現神經網絡,識別手寫數字,並測試神經網絡的性能。第3章帶領讀者進一步了解簡單的神經網絡,觀察已受訓練的神經網絡內部,嘗試進一步改善神經網絡的性能,並加深對相關知識的理解。附錄分別介紹了所需的微積分知和樹莓派知識。
本書適合想要從事神經網絡研究和 探索 的讀者學習參考,也適合對人工智能、機器學習和深度學習等相關領域感興趣的讀者閱讀。
九,趣學ython編程
《趣學python編程》是一本輕鬆、快速掌握python編程的入門讀物。全書分為3部分,共18章。第1部分是第1章到第12章,介紹python編程基礎知識,包括python的安裝和配置、變量、字符串、列表、元組和字典、條件語句、循環語句函數和模塊、類、內建函數和繪圖,等等。第2部分是第13章和第14章,介紹如何用python開發實例 遊戲 彈球。第3部分包括第15章到第18章,介紹了火柴人實例 遊戲 的開發過程。
這本書語言輕鬆,通俗易懂,講解由淺入深,力求將讀者閱讀和學習的難度降到最低。任何對計算機編程有興趣的人或者首次接觸編程的人,不論孩子還是成人,都可以通過閱讀本書來學習python編程。
十,Python網絡編程(第3版)
本書針對想要深入理解使用Python來解決網絡相關問題或是構建網絡應用程序的技術人員,結合實例講解了網絡協議、網絡數據及錯誤、電子郵件、服務器架構和HTTP及Web應用程序等經典話題。具體內容包括:全面介紹Python3中最新提供的SSL支持,異步I/O循環的編寫,用Flask框架在Python代碼中配置URL,跨站腳本以及跨站請求偽造攻擊網站的原理及保護方法,等等。
如何用python爬取豆瓣top250
import string
import re
import urllib2
class DouBanSpider(object) :
def __init__(self) :
self.page = 1
self.cur_url = “{page}filter=type=”
self.datas = []
self._top_num = 1
def get_page(self, cur_page) :
url = self.cur_url.format(page = (cur_page – 1) * 25)
my_page = urllib2.urlopen(url).read().decode(“utf-8”)
return my_page
def find_title(self, my_page) :
temp_data = []
movie_items = re.findall(r’span.*?class=”title”(.*?)’, my_page, re.S)
for index, item in enumerate(movie_items) :
if item.find(” “) == -1 :
temp_data.append(“Top” + str(self._top_num) + ” ” + item)
self._top_num += 1
self.datas.extend(temp_data)
def start_spider(self) :
while self.page = 4 :
my_page = self.get_page(self.page)
self.find_title(my_page)
self.page += 1
def main() :
my_spider = DouBanSpider()
my_spider.start_spider()
for item in my_spider.datas :
print item
main()/span.*?class=”title”
如何用python去爬豆瓣圖書
如何用python去爬豆瓣圖書
首先你要明白爬蟲怎樣工作。
想象你是一隻蜘蛛,現在你被放到了互聯“網”上。那麼,你需要把所有的網頁都看一遍。怎麼辦呢?沒問題呀,你就隨便從某個地方開始,比如說人民日報的首頁,這個叫initial pages,用$表示吧。
在人民日報的首頁,你看到那個頁面引向的各種鏈接。於是你很開心地從爬到了“國內新聞”那個頁面。太好了,這樣你就已經爬完了倆頁面(首頁和國內新聞)!暫且不用管爬下來的頁面怎麼處理的,你就想象你把這個頁面完完整整抄成了個html放到了你身上。
突然你發現, 在國內新聞這個頁面上,有一個鏈接鏈回“首頁”。作為一隻聰明的蜘蛛,你肯定知道你不用爬回去的吧,因為你已經看過了啊。所以,你需要用你的腦子,存下你已經看過的頁面地址。這樣,每次看到一個可能需要爬的新鏈接,你就先查查你腦子裡是不是已經去過這個頁面地址。如果去過,那就別去了。
好的,理論上如果所有的頁面可以從initial page達到的話,那麼可以證明你一定可以爬完所有的網頁。
豆瓣讀書數據分析-python
豆瓣讀書數據分析-python
(思路來自課程老師綠樹)剛剛學完python數據分析的課程,決定做一個有關python數據分析的小項目,思來想去,還是決定分析豆瓣的數據,因為豆瓣是python寫成的。用python爬蟲抓取數據較為方便,比一般網站少很多頁面bug問題,而且豆瓣上的數據量大概在million這個量級,算是算太大的,但也不小。正好手裡有一份跑出的大概300多萬的數據,直接開始分析。
首先導入數據,將數據賦給一個dataframe,取名為douban
douban=pd.read_table(“douban.dat”,sep=”::”,names=[“user”,”book”,”rate”])
看一下這個數據的描述
總共3648104行,其他的諸如平均數,中位數的值,是豆瓣書籍的鏈接後綴,並無實際意義。
然後關於豆瓣讀書用戶
user_count=douban.groupby(‘user’).count()
user_count=user_count.sort(‘book’,ascending=False)
、我們發現共有38萬多讀者,計數最多的一位eastwolf東狼,真的很厲害,一共寫了4000多的書評。不過我們不排除這是個機器人或者公眾號,因為4000度書評,就算一天看一本書,也要寫11年,而豆瓣創建才不過11年。有點假,不過這個問題我們暫且不談,僅從數據來看,第一名最愛讀書的書霸,就是eastwolf了,大家鼓掌。
然後我們再來看一下書籍的信息
看一下描述
最受歡迎的書有2071個書評,平均每本書大概有45個書評。
看一下具體情況
我們挑出書評最多的10本,找到圖片,就是以下這10本書
可以發現由於不同出版社不同翻譯的問題,10本書實際是4本,豆瓣果然是文藝青年聚集地,《小王子》《追風箏的人》《活着》幾乎就是文藝青年必備了。
豆瓣做為文藝青年聚集地,本身用戶屬於素質較高的群體。裡面分很多小組,讀書,電影,音樂,算是給大家找志同道合之友的好地方。關於讀書這個方面,在大家都很愛讀書的基礎上,我們可以用戶進行聚類分析。依靠的根據是對書籍的打分,這樣來計算不同用戶之間的距離。因為讀的書目越相似,對同一本書打分結果越接近,說明價值觀越相同,找出這樣的相似者,就能給用戶推薦一下潛在的‘同志’,算是給豆瓣增加一個社交功能了。
首先我們把用戶信息和書本信息結合,因為考慮到大部分書籍用戶之間交集為空,而且我的電腦的處理能力有限,所以截取了用戶和書籍的前100進行分析,這樣得到一個新的dataframe
然後我們建立鄰近性矩陣
ubrcore=doubancore.pivot(‘user’,’book’,’rate’)
即使在取前100的條件下,依然大部分是空白,為了能夠計算,我們把空白處替換成0.
ubrcore1=ubrcore.fillna(value=0)
然後對要進行距離計算,由於本身對書本的打分在1到5之間,純粹的大小差距並不大,所以我們更多的考慮在方向上的差異,所以用餘弦距離來反應不同用戶之間的差異性。
構建公式,並將計算結果給userdistdf這個dataframe
Userdistdf結果如下
最像用戶的就是他自己,餘弦距離都是1。其他人只能是部分相像,果然人生得一知己難啊。不過知己找不到,我們可以給用戶找10個部分相像的‘同志’
構建函數
試一下
Bingo,成功!!!!
這樣,我們可以為用戶qdmimi19810920找到了10個志同道合的‘同志’了。
如何用python爬取豆瓣讀書的數據
這兩天爬了豆瓣讀書的十萬條左右的書目信息,用時將近一天,現在趁着這個空閑把代碼總結一下,還是菜鳥,都是用的最簡單最笨的方法,還請路過的大神不吝賜教。
第一步,先看一下我們需要的庫:
import requests #用來請求網頁
from bs4 import BeautifulSoup #解析網頁
import time #設置延時時間,防止爬取過於頻繁被封IP號
import re #正則表達式庫
import pymysql #由於爬取的數據太多,我們要把他存入MySQL數據庫中,這個庫用於連接數據庫
import random #這個庫里用到了產生隨機數的randint函數,和上面的time搭配,使爬取間隔時間隨機
這個是豆瓣的網址:x-sorttags-all
我們要從這裡獲取所有分類的標籤鏈接,進一步去爬取裡面的信息,代碼先貼上來:
import requests
from bs4 import BeautifulSoup #導入庫
url=”httom/tag/?icn=index-nav”
wb_data=requests.get(url) #請求網址
soup=BeautifulSoup(wb_data.text,”lxml”) #解析網頁信息
tags=soup.select(“#content div div.article div div table tbody tr td a”)
#根據CSS路徑查找標籤信息,CSS路徑獲取方法,右鍵-檢查-copy selector,tags返回的是一個列表
for tag in tags:
tag=tag.get_text() #將列表中的每一個標籤信息提取出來
helf=”hom/tag/”
#觀察一下豆瓣的網址,基本都是這部分加上標籤信息,所以我們要組裝網址,用於爬取標籤詳情頁
url=helf+str(tag)
print(url) #網址組裝完畢,輸出
以上我們便爬取了所有標籤下的網址,我們將這個文件命名為channel,並在channel中創建一個channel字符串,放上我們所有爬取的網址信息,等下爬取詳情頁的時候直接從這裡提取鏈接就好了,如下:
channel=”’
tag/程序
”’
現在,我們開始第二個程序。
QQ圖片20160915233329.png
標籤頁下每一個圖片的信息基本都是這樣的,我們可以直接從這裡提取到標題,作者,出版社,出版時間,價格,評價人數,以及評分等信息(有些外國作品還會有譯者信息),提取方法與提取標籤類似,也是根據CSS路徑提取。
我們先用一個網址來實驗爬取:
url=”htt/tag/科技”
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “lxml”)
tag=url.split(“?”)[0].split(“/”)[-1] #從鏈接裡面提取標籤信息,方便存儲
detils=soup.select(“#subject_list ul li div.info div.pub”) #抓取作者,出版社信息,稍後我們用spite()函數再將他們分離出來
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”) #書名
#以上抓取的都是我們需要的html語言標籤信息,我們還需要將他們一一分離出來
for detil,scor,person,title in zip(detils,scors,persons,titles):
#用一個zip()函數實現一次遍歷
#因為一些標籤中有譯者信息,一些標籤中沒有,為避免錯誤,所以我們要用一個try來把他們分開執行
try:
author=detil.get_text().split(“/”,4)[0].split()[0] #這是含有譯者信息的提取辦法,根據“/” 把標籤分為五部分,然後依次提取出來
yizhe= detil.get_text().split(“/”, 4)[1]
publish=detil.get_text().split(“/”, 4)[2]
time=detil.get_text().split(“/”, 4)[3].split()[0].split(“-“)[0] #時間我們只提取了出版年份
price=ceshi_priceone(detil) #因為價格的單位不統一,我們用一個函數把他們換算為“元”
scoe=scor.get_text() if True else “” #有些書目是沒有評分的,為避免錯誤,我們把沒有評分的信息設置為空
person=ceshi_person(person) #有些書目的評價人數顯示少於十人,爬取過程中會出現錯誤,用一個函數來處理
title=title.get_text().split()[0]
#當沒有譯者信息時,會顯示IndexError,我們分開處理
except IndexError:
try:
author=detil.get_text().split(“/”, 3)[0].split()[0]
yizhe=”” #將detil信息劃分為4部分提取,譯者信息直接設置為空,其他與上面一樣
publish=detil.get_text().split(“/”, 3)[1]
time=detil.get_text().split(“/”, 3)[2].split()[0].split(“-“)[0]
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()[0]
except (IndexError,TypeError):
continue
#出現其他錯誤信息,忽略,繼續執行(有些書目信息下會沒有出版社或者出版年份,但是數量很少,不影響我們大規模爬取,所以直接忽略)
except TypeError:
continue
#提取評價人數的函數,如果評價人數少於十人,按十人處理
def ceshi_person(person):
try:
person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) – 4])
except ValueError:
person = int(10)
return person
#分情況提取價格的函數,用正則表達式找到含有特殊字符的信息,並換算為“元”
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4)[4].split()
if re.match(“USD”, price[0]):
price = float(price[1]) * 6
elif re.match(“CNY”, price[0]):
price = price[1]
elif re.match(“\A$”, price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3)[3].split()
if re.match(“USD”, price[0]):
price = float(price[1]) * 6
elif re.match(“CNY”, price[0]):
price = price[1]
elif re.match(“\A$”, price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price
實驗成功後,我們就可以爬取數據並導入到數據庫中了,以下為全部源碼,特殊情況會用注釋一一說明。
import requests
from bs4 import BeautifulSoup
import time
import re
import pymysql
from channel import channel #這是我們第一個程序爬取的鏈接信息
import random
def ceshi_person(person):
try:
person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) – 4])
except ValueError:
person = int(10)
return person
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4)[4].split()
if re.match(“USD”, price[0]):
price = float(price[1]) * 6
elif re.match(“CNY”, price[0]):
price = price[1]
elif re.match(“\A$”, price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3)[3].split()
if re.match(“USD”, price[0]):
price = float(price[1]) * 6
elif re.match(“CNY”, price[0]):
price = price[1]
elif re.match(“\A$”, price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price
#這是上面的那個測試函數,我們把它放在主函數中
def mains(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “lxml”)
tag=url.split(“?”)[0].split(“/”)[-1]
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 = [] #建一個列表,用於存放數據
try:
author=detil.get_text().split(“/”,4)[0].split()[0]
yizhe= detil.get_text().split(“/”, 4)[1]
publish=detil.get_text().split(“/”, 4)[2]
time=detil.get_text().split(“/”, 4)[3].split()[0].split(“-“)[0]
price=ceshi_priceone(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()[0]
except IndexError:
try:
author=detil.get_text().split(“/”, 3)[0].split()[0]
yizhe=””
publish=detil.get_text().split(“/”, 3)[1]
time=detil.get_text().split(“/”, 3)[2].split()[0].split(“-“)[0]
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()[0]
except (IndexError,TypeError):
continue
except TypeError:
continue
l.append([title,scoe,author,price,time,publish,person,yizhe,tag])
#將爬取的數據依次填入列表中
sql=”INSERT INTO allbooks values(%s,%s,%s,%s,%s,%s,%s,%s,%s)” #這是一條sql插入語句
cur.executemany(sql,l) #執行sql語句,並用executemary()函數批量插入數據庫中
conn.commit()
#主函數到此結束
# 將Python連接到MySQL中的python數據庫中
conn = pymysql.connect( user=”root”,password=”123123″,database=”python”,charset=’utf8′)
cur = conn.cursor()
cur.execute(‘DROP TABLE IF EXISTS allbooks’) #如果數據庫中有allbooks的數據庫則刪除
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) #執行sql語句,新建一個allbooks的數據庫
start = time.clock() #設置一個時鐘,這樣我們就能知道我們爬取了多長時間了
for urls in channel.split():
urlss=[urls+”?start={}type=T”.format(str(i)) for i in range(0,980,20)] #從channel中提取url信息,並組裝成每一頁的鏈接
for url in urlss:
mains(url) #執行主函數,開始爬取
print(url) #輸出要爬取的鏈接,這樣我們就能知道爬到哪了,發生錯誤也好處理
time.sleep(int(format(random.randint(0,9)))) #設置一個隨機數時間,每爬一個網頁可以隨機的停一段時間,防止IP被封
end = time.clock()
print(‘Time Usage:’, end – start) #爬取結束,輸出爬取時間
count = cur.execute(‘select * from allbooks’)
print(‘has %s record’ % count) #輸出爬取的總數目條數
# 釋放數據連接
if cur:
cur.close()
if conn:
conn.close()
這樣,一個程序就算完成了,豆瓣的書目信息就一條條地寫進了我們的數據庫中,當然,在爬取的過程中,也遇到了很多問題,比如標題返回的信息拆分後中會有空格,寫入數據庫中會出現錯誤,所以只截取了標題的第一部分,因而導致數據庫中的一些書名不完整,過往的大神如果有什麼辦法,還請指教一二。
等待爬取的過程是漫長而又欣喜的,看着電腦上一條條信息被刷出來,成就感就不知不覺湧上心頭;然而如果你吃飯時它在爬,你上廁所時它在爬,你都已經爬了個山回來了它還在爬時,便會有點崩潰了,擔心電腦隨時都會壞掉(還是窮學生換不起啊啊啊啊~)
所以,還是要好好學學設置斷點,多線程,以及正則,路漫漫其修遠兮,吾將上下而求索~共勉~
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246332.html