用python進行網頁爬取,數據插入數據庫


  用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進行數據的提交,就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM