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