读书笔记(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”,具体以下:

相关文章
相关标签/搜索