今天是4.25號。
很快四月也走到了尾聲,學期即將過半,我還沒有找到理想的實習。不過投出去的文章已經有一篇有了好的結果,另外四篇也期待和祈禱都被錄用~~
python爬蟲的學習自己大抵學了60%吧,但自己最近在想自己學習python最終目的是想用python來進行數據分析的,爬蟲只算是獲取數據的第一步,那么接下來是不是應該多學學numpy,pandas以及其他數據分析的庫。所以最近還會補充點python中的基礎知識,為后面的學習作好準備。
第一部分 數據類型相關知識
能夠進行迭代的數據類型有:字符串,列表,字典。
1.數字類型
int(),float()
運算符:%(取余),//(除后取整,例如a=3.8//2 ,結果為1.0)
邏輯運算符:and, or, not
round()作用是四舍五入
break是跳出所在的while或者for循環(huán)
2.字符串類型
常用函數:len(),str(),可以通過“+”和“*”來連接;s.replace('a','b')即將字符串s中的 所有a字符用b字符來替換。

如何格式化字符串:
在Python中,采用的格式化方式和C語言是一致的,用%實現,舉例如下:
'Hello, %s' % 'world'
'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?占位符,后面就跟幾個變量或者值,順序要對應好。如果只有一個%?,括號可以省略。
常見的占位符有:
%d 整數
%f 浮點數
%s 字符串
%x 十六進制整數
3.列表類型


4.字典型數據
(1)訪問字典中的一項的值:
dictionaryName[key],返回鍵key對應的值value。
(2)刪除字典中的一項:
del dictionaryName[key]
(3)字典的遍歷:
設a為一個字典型數據,則
for i in a.keys(),values(),items()經常用到。
(4)判斷一個鍵key知否在字典中:
in 或者not in
eg:'city' in infor.keys()
其他操作方法:

5.集合(set)
若s='sunset',a=set(s)
得到a:set(['s','u','n','s','e','t'])
兩個集合之間的操作有多種,主要如下:

第二部分 文件操作相關知識
字符串在python中默認以unicode編碼保存的,常見的編碼方式有:
(1)ASCII編碼
(2)UTF-8編碼
(3)GBK編碼
(4)Unicode編碼
(1)、(2)、(3)通過decode()將字符串解碼為unicode,通過encode()將unicode編碼字符串轉為其他三種編碼,
文件一般分為文本文件和二進制文件(除文本以外的文件)
操作文件一般包括:打開文件,(讀取、寫入、定位、追加、計算)文件,關閉文件。
(1)打開文件
用法f=open(<'xxx文件路徑'>,<mode>),其中f是一個變量

(2)文件讀取、寫入、定位
a)讀取文件用法f.read(),f.readline(),f.readlines()三者只是返回值不同,第一個返回的是整個文本的字符串;第二個返回一行的字符串;第三個返回整個文本的列表,其中一行字符串為一個元素。
b)寫入文件的用法,使用時需要傳入參數file.write(a),file.writelines(a),二者區(qū)別在于第一個是寫入字符串a到文件file中;第二個是寫入列表a到文件file中。


完整例子如:
file=open('C:\Users\guohuaiqi\Desktop\1.txt','w') #打開模式要用''括起來
file.writelines(a)或者file.readlines()
file.close
最后貼上一個用于詞頻統(tǒng)計(僅僅針對英文文章)的代碼:
步驟為:
(1)用爬蟲獲取內容,用空格''replace文章中出現的其他符號,然后保存為text格式文件;
(2)定義一個函數,先用split('')對句子進行分割,然后對一行的單詞進行統(tǒng)計;
(3)讀取text文件,將每一行句子傳入(2)中的函數,執(zhí)行完畢后,將字典數據轉化為list數據然后進行排序。
此外有兩點知識新學到如下:
(4)使用如b={}為一個字典數據,可直接用list(b.items())將b轉化為列表數據。
(5)使用sorted()函數對列表中元素是cell的數據進行排序
例:student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10)]
那么sorted(student_tuples, key=itemgetter(2), reverse=True)表示對student_tuples列表按元組中的第三個元素age進行排序**,其中reverse(布爾值)參數用來標記排序順序的,True-遞減,False-遞增(默認)
(6)打開文件的路徑時要么為'C:\Users\guohuaiqi\Desktop\1.txt',也可是r'C:\Users\guohuaiqi\Desktop\1.txt',這樣r后的字符串都按字面意思而不進行轉義。
__author__ = 'guohuaiqi'
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
from bs4 import BeautifulSoup
import operator
url='https://hbr.org/2016/04/what-we-can-learn-from-one-of-the-worlds-most-mocked-cars'
a=[]
def get_contents(url):
web_data=requests.get(url)
soup=BeautifulSoup(web_data.text,'lxml')
paragraphs=soup.select('div.article.article-first-row p')
for content in paragraphs:
b=content.get_text().lower()
for ch in b:
if ch in ',().:“”?‘’-':
b=b.replace(ch,'')
b=b.replace('\xa0',' ')
a.append(b)
file=open('C:\\Users\\guohuaiqi\\Desktop\\1.txt','w')
file.writelines(a)
file.close
print('done!!!')
def words_count(line,wordsCount):
words=line.split(' ') #將每一行按空格分割成一個列表
for word in words:
if word in wordsCount.keys(): #應該用wordsCount.keys()而不是wordsCount,否則在計數we時會把包含we的單詞如were等計算在內
wordsCount[word]+=1
else:
wordsCount[word]=1
wordsCount={} #wordsCount為一個空字典
def main():
f=open('C:\\Users\\guohuaiqi\\Desktop\\1.txt','r')
for line in f.readlines():
words_count(line,wordsCount)
pairs=list(wordsCount.items()) #會把字典中的鍵和值轉化為一個元組cell,每一個cell作為list的一個元素返回
print(sorted(pairs,key=operator.itemgetter(1),reverse=True))
f.close
if __name__=='__main__':
main()