用python進行網頁信息的爬取還是很簡單的,而且現在進行爬取的
在爬取之前,確定好自己的網頁,然后用F12(查看網頁源代碼,然后確定網頁的),這里就以一個簡單的,頁面布局簡單的頁面進行講解:http://jbk.39.net/yyz/jbzs/
先來看下頁面的布局,以及我們想要進行頁面的信息:
就這個頁面,我們想要從這里面將頁面中的疾病的名稱,還有就是疾病的介紹,以及疾病的基本信息(是否屬於醫保、別名、發病部位、傳染性、、、)
代碼很簡單:
#!/usr/bin/env python # coding=utf-8 import requests from bs4 import BeautifulSoup hdrs = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)'} url = "http://jbk.39.net/yyz/jbzs/" r = requests.get(url, headers = hdrs) soup = BeautifulSoup(r.content.decode('utf8', 'ignore'), 'lxml') #疾病名稱 for tag in soup.find_all('div', class_='disease'): disease = tag.find('h1').get_text() disease_name = disease print(disease) #疾病簡介 div_list = soup.find_all('p', class_='introduction') for each in div_list: introduce = each.text.strip() disease_introduce = introduce print(disease_introduce) for tag in soup.find_all('div', class_='list_left'): uls = tag.find('ul',class_="disease_basic") m_span = uls.findAll('span') # print(m_span) is_yibao = m_span[1].contents[0]#是否醫保 other_name = m_span[3].contents[0]#別名 fbbw = m_span[5].contents[0]#發病部位 is_infect = m_span[7].contents[0]#是否傳染 dfrq = m_span[9].contents[0]#多發人群 m_a = uls.findAll('a') fbbw = m_a[0].contents[0]#發病部位 print(is_yibao) print(other_name) print(is_infect) print(fbbw)
然后看下打印的結果:
代碼從頭開始講解一下:
用到的就是BeautifulSoup的框架進行信息的爬取,
hdrs = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)'}
這句代碼就是設置代理,然后再將url、soup的信息進行傳入(設置要爬取的網址,還有就是編碼方式以及頁面的設置)
根據f12查看頁面的標簽之后,就可以通過標簽選擇的方式將標簽里面的信息進行獲取
for tag in soup.find_all('div', class_='disease'): disease = tag.find('h1').get_text() disease_name = disease print(disease)
這里面就是查看頁面的標簽之后,通過標簽的類型以及class進行設定
例如上面的疾病的名稱的獲取就是將頁面里面class=‘disease’的里面的h1標簽里面的信息進行獲取
div_list = soup.find_all('p', class_='introduction') for each in div_list: introduce = each.text.strip() disease_introduce = introduce print(disease_introduce)
這里疾病的簡介的獲取方式和上面的是類似的,就只是就是查找class=‘introduction’的p標簽里面的信息進行獲取
for tag in soup.find_all('div', class_='list_left'): uls = tag.find('ul',class_="disease_basic") m_span = uls.findAll('span') # print(m_span) is_yibao = m_span[1].contents[0]#是否醫保 other_name = m_span[3].contents[0]#別名 fbbw = m_span[5].contents[0]#發病部位 is_infect = m_span[7].contents[0]#是否傳染 dfrq = m_span[9].contents[0]#多發人群 m_a = uls.findAll('a') fbbw = m_a[0].contents[0]#發病部位
這些就是將class=‘list_left’的div里面的信息進行獲取,這些信息都是存在審判標簽中
然后我們根據span的下標進行獲取就可以了
如果想講這些信息添加到數據庫,其實也很簡單,下面說一下將信息添加到數據庫的方法(這里是mysql數據庫,數據庫的連接上都是大同小異)
首先想要連接數據庫,就要先引入數據庫的鏈接包:
import pymysql
print('連接到mysql服務器...') db = pymysql.connect( host="localhost", user="用戶名", passwd="密碼", port=端口(基本上是3306), db="數據庫名稱", charset='utf8', cursorclass=pymysql.cursors.DictCursor) print('連接上了!') cursor = db.cursor()
這個就是將數據庫的鏈接信息進行設置,然后連接成功,在控制台顯示"連接上了"
insert_color = ("INSERT INTO for_health(id,problem,introduce,solution,problem_id,drug,paqu_address,is_infect,symptom,cure_rate)" "VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)") dese = (id,problem,introduce,solution,problem_id,drug,paqu_address,is_infect,symptom,cure_rate) cursor.execute(insert_color, dese) db.commit()
這些就是將數據傳入數據庫的操作了
當然變量名是自己進行設定的,這里面的insert_color就是sql
dese就是一個變量的集合
然后將這兩個參數進行傳遞到cursor.execute,然后commit進行數據的提交,就可以了