读书笔记(4)——python爬取糗事百科,并存到MySQL中

本文介绍如何使用Python爬虫抓取糗事百科网站上的用户名和内容,并将其存储到MySQL数据库中。文章详细展示了从安装MySQL、配置环境到编写爬虫代码的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装MySQL。使用phpStudy集成工具来安装MySQL服务器,或者可以用USBwebserve进行安装。

打开USBwebserve,界面如下

232017_J0vP_3629884.png

当Apache和Mysql都是绿色勾勾时,直接点击PHPMyAdmin,进入界面:

232219_8IwN_3629884.png

输入帐号-密码后点击执行:

232302_dOX6_3629884.png

MySQL安装到此结束。

--------------------------------------

这边采用的数据是爬取糗事百科,获得其用户名及对应的糗事。输出到终端,并且存到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服务器错误)。

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()

在输出时,发现会遇到各种编码问题,在这里说一下解决方法:

1、找到pymysql模块的目录,一般位于....\python\Lib\site-packages\pymysql里的connections.py的文件,用编译器打开,搜索关键词“charset=”,将编码格式改为"utf8"。

2、在phpadmin控制面板中,点击“数据库-(对应的表)-结构-(勾选相应的栏)-修改-整理处改为utf-8”,具体如下:

001056_pSgB_3629884.png

001111_t9tk_3629884.png

001133_GXZg_3629884.png

001215_llox_3629884.png

001630_eCbT_3629884.png

转载于:https://my.oschina.net/u/3629884/blog/1492446

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值