讀書筆記(4)——python爬取糗事百科,並存到MySQL中

安裝MySQL。使用phpStudy集成工具來安裝MySQL服務器,或者能夠用USBwebserve進行安裝。php

打開USBwebserve,界面以下python

當Apache和Mysql都是綠色勾勾時,直接點擊PHPMyAdmin,進入界面:mysql

輸入賬號-密碼後點擊執行:web

MySQL安裝到此結束。sql

--------------------------------------數據庫

這邊採用的數據是爬取糗事百科,得到其用戶名及對應的糗事。輸出到終端,而且存到MySQL中。服務器

上代碼:工具

#-*- coding-8 -*-

import pymysql
import requests
import lxml
from bs4 import BeautifulSoup


def craw(url,page = '1'):
    user_agent = 'Mozilla/4.0 (compatible; MISE 5.5; Windows NT)'
    headers = {'User_Agent':user_agent}
     
    url_text = requests.get(url,headers = headers)
    if url_text.status_code != 200:
        url_text.encoding = 'utf-8'
        print('ERROR')
        
    soup = BeautifulSoup(url_text.text,'lxml')

    contents = soup.select(r'.content')
    names = soup.find_all('h2')
    n = 1
    conn = pymysql.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8')
    conn.query(" CREATE TABLE data (name CHAR(20),content CHAR(30))")
    cursor = conn.cursor()
    
    for content,name in zip(contents,names):
        print('第%s趣事'%n)
        n += 1
        name = name.get_text()
        content = content.get_text()
        print('用戶名:'+name+'內容:'+content)
    
        cursor.execute(" INSERT INTO data (name,content) VALUES('{0}','{1}')".format(name,content))
        conn.commit()
    cursor.close()
    conn.close()

if __name__ == '__main__':
    url = r'https://www.qiushibaike.com/'
    s1 = craw(url)

 

導入對應模塊,pymysql是python代碼操做MySQL數據庫的模塊,能夠經過pip install pymysql安裝pymysql模塊。編碼

import pymysql
import requests
import lxml
from bs4 import BeautifulSoup

 

設置頭文件,requests請求訪問糗事百科,經過status_code返回的值能夠判斷請求是否成功若是返回的code不是200的話則說明訪問不成功(200請求成功,303從新定向,400請求錯誤,401未受權,403禁止訪問,404文件未找到,500服務器錯誤)。url

def craw(url,page = '1'):
    user_agent = 'Mozilla/4.0 (compatible; MISE 5.5; Windows NT)'
    headers = {'User_Agent':user_agent}
     
    url_text = requests.get(url,headers = headers)
    if url_text.status_code != 200:
        url_text.encoding = 'utf-8'
        print('ERROR')

而後使用BeautifulSoup進行解析,使用的是lxml解析器,提取出糗事百科網的用戶與對應的內容,分別用的是CSS選擇器和find_all方法。

soup = BeautifulSoup(url_text.text,'lxml')
    contents = soup.select(r'.content')
    names = soup.find_all('h2')
    n = 1

鏈接MySQL,host:主機ip,port:端口,user:用戶名,password:密碼,db:數據庫名稱,charset:編碼。經過query執行後面的SQL語句,而後建立一個表table和一個遊標curser。

conn=pymysql.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8')
conn.query(" CREATE TABLE data (name CHAR(20),content CHAR(100))")
cursor = conn.cursor()

用for語句,逐一輸出到終端顯示,利用遊標curser執行後面的SQL語句,插入對應的用戶與數據,而後commit()提交事務,關閉遊標,關閉數據庫連接。

for content,name in zip(contents,names):
        print('第%s趣事'%n)
        n += 1
        name = name.get_text()
        content = content.get_text()
        print('用戶名:'+name+'內容:'+content)
    
        cursor.execute(" INSERT INTO data (name,content)VALUES('{0}','{1}')".format(name,content))
        conn.commit()
    cursor.close()
    conn.close()

在輸出時,發現會遇到各類編碼問題,在這裏說一下解決方法:

一、找到pymysql模塊的目錄,通常位於....\python\Lib\site-packages\pymysql裏的connections.py的文件,用編譯器打開,搜索關鍵詞「charset=」,將編碼格式改成"utf8"。

二、在phpadmin控制面板中,點擊「數據庫-(對應的表)-結構-(勾選相應的欄)-修改-整理處改成utf-8」,具體以下:

相關文章
相關標籤/搜索