Python爬虫(3)——将维基百科词条导入MySQL

来源:互联网 发布:好的淘宝零食点知乎 编辑:程序博客网 时间:2024/06/05 19:43

最近需要大量爬取数据,像之前那样存储在单个文件中已不合适,本文主要以维基百科为例,将爬取的词条数据导入到MySQL中。

在用Python连接MySQL之前,需要先安装一个Python包pymsql
在Anaconda中的安装过程如下图所示;

这里写图片描述

1.Python连接MySQL数据库

在正式开始之前,先介绍下Python连接MySQL的标准流程。在Python中将数据存储到MySQL的流程主要包括连接数据库创建会话断开数据库连接等。

(1)连接数据库

connection = pymysql.connect(host = 'localhost',                             user = 'root',                             password = '123456',                             db = 'wikiurl',                             charset = 'utf8mb4')

(2)创建会话

在执行数据存储操作时,该会话会一直存在,在此期间主要执行创建sql语句执行sql语句提交结果等操作。

try:            #获取会话指针            with connection.cursor() as cursor:                #创建sql语句                sql = "insert into `urls` (`urlname`,`urlhref`) values (%s,%s)"                 #执行sql语句                cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org" + url['href']))                #提交                connection.commit()         finally:            connection.close()

(3)断开数据库连接

connection.close()

2.将维基百科词条导入MySQL

代码如下所示:

# -*- coding: utf-8 -*-"""Created on Thu May  4 21:01:38 2017@author: zch"""from urllib.request import urlopenfrom bs4 import BeautifulSoupimport re import pymysql.cursors#请求URL并将结果用UTF-8编码response = urlopen('https://en.wikipedia.org/wiki/Main_Page').read().decode('utf-8')#用BeautifulSoup解析soup = BeautifulSoup(response,'lxml')#print(soup.head.title.string)#print(soup)#p_text = soup.find('a',href=re.compile(r"/wiki/Deaths_in_2017"))#print(p_text.name,p_text.get_text()) #获取所有以/wiki/开头的a标签的href属性listUrls = soup.find_all('a',href=re.compile('^/wiki/'))for url in listUrls:    #过滤掉所有以.jpg或.JPG结尾的url    if not re.search('\.(jpg|JPG)$',url['href']):        #输出所有Wikipedia词条和对应的URL链接        print(url.get_text(),"---->","https://en.wikipedia.org" + url['href'])        #获取数据库链接        connection = pymysql.connect(host = 'localhost',                             user = 'root',                             password = '123456',                             db = 'wikiurl',                             charset = 'utf8mb4')        try:            #获取会话指针            with connection.cursor() as cursor:                #创建sql语句                sql = "insert into `urls` (`urlname`,`urlhref`) values (%s,%s)"                 #执行sql语句                cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org" + url['href']))                #提交                connection.commit()         finally:            connection.close()

执行后MySQL数据库情况如下图所示:

这里写图片描述

如果在运行的过程中,出现以下认证错误的话:

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>

可以导入ssl模块,并做全局设置:

import sslssl._create_default_https_context = ssl._create_unverified_context
0 0