python爬考研 Python爬取考研必備單詞

2021-10-11 14:45:15 字數 3567 閱讀 3667

原博主的**可能因為單詞發音的音訊爬取有問題,導致無法將單詞存入資料庫,不過也非常感謝原博主,我根據原始碼做了一定刪減和更改,下次可能會根據使用者的需求,輸入需求,爬取相應的單詞。

主要步驟:

1.連線資料庫

2.建立word單詞表

3.獲取網頁主介面html**

4.獲取class(課程型別)介面html**,如「考研課程」

5.獲取course(課時內容,一門課程有多節課時)介面html,在course中得到word(單詞)、pronunciation(發音)、translation(翻譯)

ps:發音音訊暫不考慮,好吧,博主我時間來不及了,老師在催了。。。

6.將資料存入資料庫,over!

7.最後放主函式

1連線資料庫:

輸入相關資料,我資料庫沒有密碼所以沒寫,db中的只是建立資料庫時單詞寫錯了,尬了

def conn(): # 連線資料庫

db = pymysql.connect(host='localhost', user='root', password='', db='phython', port=3306)

print('已連線資料庫')

return db

2建立word表

def create_table(db): # 建立乙個單詞表

cursor = db.cursor() # 建立游標

sql = 'create table if not exists word (id varchar(255) not null,word varchar(255) not null,' \

'trans varchar(255) not null,word_type varchar(255) not null, primary key (id))'

cursor.execute(sql) # 執行sql語句

print('建表完成!')

db.close()

3獲取網頁主介面html

首先加乙個請求頭,有些**會遮蔽爬蟲的請求,所以加乙個請求頭起偽裝作用

然後就看注釋吧

header = ) # 找到存放class_id的div

class_li = class_div.find('ul', ).find_all('li') # 找到div下的ul標籤內的所有li

for class_id in class_li:

return class_list

5獲取course的html,有效資訊為:單詞、發音、翻譯

def get_info(word_html, type_name): # 爬取所有的單詞、發音、翻譯

word_info = beautifulsoup(word_html, "html.parser")

word_div = word_info.find_all('div', class_="word_main_list_w") # 單詞div內容

pronunce_div = word_info.find_all('div', ) # 發音div內容

trans_div = word_info.find_all('div', ) # 翻譯div內容

for i in range(1, len(word_div)):

key = word_div[i].span.get('title') # 獲取單詞

pronunce = pronunce_div[i].strong.string.split() # 獲取發音

trans = trans_div[i].span.get('title') # 獲取翻譯

if len(pronunce) < 1: # 無發音則跳過本次迴圈

continue

word_all[key] = [pronunce[0], trans, type_name] # 字典結構:字典名=

print('建立資料成功')

return word_all

6將資料存入資料庫

注釋裡有單詞儲存到字典的結構:字典名=, key在本專案中就是word單詞,value1為發音,value2為翻譯,value3為詞彙型別。如果要獲取字典中的value,則為:字典名【key】【下標】,如word_dict【key】就是value1的值(部落格裡不能連用2個英文方括號,便用中文的代替了)

構造sql語句,python裡佔位符為%s

def insert_words(word_dict, db): # 爬取資料到資料庫

cursor = db.cursor() # 建立乙個游標

# print(word_dict)

# word_dict是乙個字典,模型:

for key in word_dict:

sql = 'insert into word(word, pronunciation, trans, word_type) values(%s, %s, %s, %s)' # 構造sql語句

try:

cursor.execute(sql, (key, word_dict[key][0], word_dict[key][1], word_dict[key][2]))

# key就是單詞,word_dict[key][0]就是發音...

db.commit() # 插入資料

except:

db.rollback() # 回滾

print('資料插入成功')

db.close() # 關閉資料庫

print('資料庫成功關閉')

7主函式:

for迴圈中if語句可以改的,13是考研必備詞彙,可以換成其他id,但是六級id的好像不可以,我也不知道什麼問題,希望有大神能指教一下

就看注釋吧

def main():

db = conn()

create_table(db) # 建立乙個表

base_url = '' # 主頁**

base_html = get_html(base_url) # 得到首頁的h5**

class_id = get_url(base_html) # 得到所有class_id值

#print(class_id)

print('爬取主頁')

for id in class_id: # word_all為class_id所有可能的取值

# print(id)

if id == '13': # 考研詞彙class_id

class_url = '?action=courses&classid=' + str(id) # 利用字串拼接起來,得到url**

html = get_html(class_url)

class_info = beautifulsoup(html, "html.parser") # 課程資訊

# 獲取課程中所有課時,其中li的長度就是課時的數量

course_li = class_info.find('ul', ).find_all('li')

name_info = class_info.find('div', ) # 得到顯示單詞型別的div內容

# print(name)

r = re.compile(".*?

(.*?)") # 從div中匹配單詞型別

Python 爬取考研調劑計畫餘額資訊

今年由於疫情原因,考研複試 調劑紛紛推遲,時至5月20日,才開通考研調劑系統 但是調劑資訊量非常大,畢竟中國大學多到數不清,而且一所學校不止一條調劑資訊,可想而知,資訊量有多大。雖然系統有一部分篩選條件,但是這些篩選條件可能依然不能滿足需求,這就需要把所有可能需要的資料爬取下來,進行進一步的篩選。學...

python爬取基金 Python 爬基金資料

coding utf 8 importjsonimportrequestsfrom lxml importetreefrom htmlparser importhtmlparserfrom pymongo importmongoclient client mongoclient localhost ...

python爬豆瓣 Python 爬一下豆瓣電影

簡介 純屬python小練習 檔案結構 usr bin python coding utf 8 import urllib2 class html object def downlod self,url if url is none return none response urllib2.urlo...