Python爬虫是一种自动化技术,主要用于从互联网上抓取数据。在进行Python爬虫时,我们通常需要将爬取到的数据存入数据库中,以便进一步处理和分析。数据入库是Python爬虫的最后一步,也是最为关键的一步。本文将详细介绍,包括数据清洗、数据存储和数据读取等。
一、Python爬虫数据清洗
在进行Python爬虫时,我们通常会面临以下问题:
1. 爬取到的数据格式不规范,需要进行清洗。
2. 爬取的数据量太大,需要筛选出有价值的数据。
3. 爬取到的数据中包含大量垃圾信息,需要进行过滤。
针对这些问题,我们需要进行数据清洗。数据清洗的主要任务是将爬虫爬取的原始数据进行初步的处理和整理,使其能够被后续的数据存储程序正确地处理。具体包括以下几个方面:
1. 字符串处理
在进行数据清洗时,我们通常需要对爬取到的字符串进行处理。比如,我们需要去除字符串中的空格和换行符、将中文转换为Unicode编码等。
2. 数据类型转换
3. 数据筛选
爬虫数据中通常包含丰富的信息,但不是所有信息都是有价值的。因此,我们需要对爬取到的数据进行筛选,只选择敲质量较高的数据。
4. 垃圾信息过滤

爬虫爬取的数据中往往包含大量垃圾信息,比如广告信息、网络用语等。这些信息对数据分析和处理都没有任何帮助,因此我们需要将其过滤掉。
二、Python爬虫数据存储
在将Python爬取的数据存储到数据库中时,我们需要确定数据库类型、建立数据库表结构、创建操作数据库的程序等。数据存储的过程包括以下几个步骤:
1. 确定数据库类型
在选择数据库时,应该根据具体的应用场景选择适当的数据库类型。常见的数据库类型包括MySQL、Oracle、SQL Server、MongoDB等。
2. 建立数据库表结构
在将爬取到的数据存储到数据库中之前,我们需要先建立数据库表结构。数据库表结构的设计应该根据需要存储的数据类型进行设计。
3. 创建操作数据库的程序
在将数据存储到数据库中之前,我们需要先编写程序,以便操作数据库。该程序是将Python爬虫爬取到的数据存储到数据库中的关键,需要保证程序的正确性和可靠性。
4. 数据存储
在完成上述准备工作之后,我们就可以将爬取到的数据存储到数据库中了。存储数据库的方式包括以下几种:
(1)使用SQL语句将数据写入数据库中。
(2)使用ORM框架将数据写入数据库中。
(3)使用NoSQL数据库将数据写入数据库中。
三、Python爬虫数据读取
在将Python爬取的数据存储到数据库中之后,我们需要对这些数据进行读取和处理。Python爬虫数据读取的方式包括以下几种:
1. 使用SQL语句进行数据读取,然后使用Python程序进行处理。
2. 使用ORM框架进行数据读取和处理。
3. 直接使用NoSQL数据库进行数据读取和处理。
无论选择哪种方式进行数据读取,都需要保证读取数据的正确性和可靠性,并能够快速地读取到有价值的数据。
本文介绍了,包括数据清洗、数据存储和数据读取等。数据入库是Python爬虫的最后一步,对数据分析和处理具有极为重要的作用。在进行Python爬虫时,我们应该注重数据清洗和存储的工作,并选择适当的数据读取方式进行数据处理。
相关问题拓展阅读:
如何用python爬取豆瓣读书的数据
我们通过bs4解析我们需要的档友字段,如:出版时间,作者/译者,豆瓣评分,售价,评价人数等。
# 解析单个tag页面下单页的信息
def parse_tag_page(html):
soup = BeautifulSoup(html,”lxml”)
tag_name = soup.select(‘title’).get_text().strip()
list_soup = soup.find(‘ul’, {‘class’: ‘subject-list’})
if list_soup == None:
print(‘获取信息列表失败’)
for book_info in list_soup.findAll(‘div’, {‘class’: ‘info’}):
# 书名
title = book_info.find(‘a’).get(‘title’).strip()
# 评价人数
people_num = book_info.find(‘span’, {‘class’: ‘pl’}).get_text().strip()
# 出版信息,作者宽蠢含
pub = book_info.find(‘div’, {‘class’: ‘pub’}).get_text().strip()
pub_list = pub.split(‘/’)
author_info = ‘作者/译者: ‘ + ‘/’.join(pub_list)
author_info = ‘作者/译者: 暂无’
pub_info = ‘出版信息: ‘ + ‘/’慎笑.join(pub_list)
pub_info = ‘出版信息: 暂无’
price_info = ‘价格: ‘ + ‘/’.join(pub_list)
price_info = ‘价格: 暂无’
rating_num= book_info.find(‘span’, {‘class’: ‘rating_nums’}).get_text().strip()
rating_num = ‘0.0’
book_data = {
‘title’: title,
‘people_num’: people_num,
‘author_info’: author_info,
‘pub_info’: pub_info,
‘price_info’: price_info,
‘rating_num’: rating_num
# return book_data
if book_data:
save_to_mongo(book_data,tag_name)
print(‘解析错误’)
return None
这两天爬了豆瓣读书的十万条左右的书目信息,用时将近一天,现在趁着这个空闲把代码总结一下,还是菜鸟,都是用的最简单最笨的方法,还请路过的大神不吝赐教。
之一步,先看一下我们需要的库:
import requests#用来请求网页
from bs4 import BeautifulSoup#解析网页
import time#设置延时时间,防止爬取过于频繁被封IP号
import re#正则表达式库
import pymysql#由于爬取的数据太多,我们要把他存入mysql数据库中,这个库用于连接数据库
import random#这个库里用到了产生随机数的randint函数,和上面的time搭配,使爬取间隔时间随机
这个是豆瓣的网址:x-sorttags-all
我们要从这里获取所有分类的标签链接,进一步去爬取里面的信息,代码先贴上来:
import requests
from bs4 import BeautifulSoup#导入库
url=”httom/tag/?icn=index-nav”
wb_data=requests.get(url) #请求网址
soup=BeautifulSoup(wb_data.text,”lxml”) #解析网页信息
tags=soup.select(“#content > div > div.article > div > div > table > tbody > tr > td > a”)
#根据CSS路径查找标签信息,CSS路径获取方法,右键-检查-copy selector,tags返回的是一个列表
for tag in tags:
tag=tag.get_text() #将列表中的每一个标签信息提取出来
helf=”hom/tag/”
#观察一下豆瓣的网址,基本都是这部分加上标签信息,所以我们要组装网址庆罩,用于爬取标签详情页
url=helf+str(tag)
print(url) #网址组装完毕,输出
以上我们便爬取了所有标签下的网址,我们将这个文件命名为channel,并在channel中创建一个channel字符串,放上我们所有爬取的网址信息,等下爬取详情页的时候直接从这里提取链接就好了,如下:
channel=”’
tag/程序
现在,我们开始第二个程序。
QQ图片.png
标签页下每一个图片的信息基本都是这样的,我们可以直接从这里提取到标题,作者,出版社,出版时间,价格,评价人数,以及评分等信息迅拍(有些外国作品还会有译者信息),提取方法与提取标签类似,也是根据CSS路径提取。
我们先用一个网址来实验爬取:
url=”htt/tag/科技”
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “lxml”)
tag=url.split(“?”).split(“/”) #从链接里面提取标签信息,方便存储
detils=soup.select(“#subject_list > ul > li > div.info > div.pub”) #抓取作者,出版社信息,稍后我们用spite()函数再将他们分离出来
scors=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums”) #抓取评分信息
persons=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.pl”) #评价人数
titles=soup.select(“#subject_list > ul > li > div.info > h2 > a”) #书名
#以上抓取的都是我们需要的html语言标签信息,我们还需要将他们一一分离出来
for detil,scor,person,title in zip(detils,scors,persons,titles):
#用一个zip()函数实现一亩差羡次遍历
#因为一些标签中有译者信息,一些标签中没有,为避免错误,所以我们要用一个try来把他们分开执行
author=detil.get_text().split(“/”,4).split() #这是含有译者信息的提取办法,根据“/” 把标签分为五部分,然后依次提取出来
yizhe= detil.get_text().split(“/”, 4)
publish=detil.get_text().split(“/”, 4)
time=detil.get_text().split(“/”, 4).split().split(“-“) #时间我们只提取了出版年份
price=ceshi_priceone(detil)#因为价格的单位不统一,我们用一个函数把他们换算为“元”
scoe=scor.get_text() if True else “” #有些书目是没有评分的,为避免错误,我们把没有评分的信息设置为空
person=ceshi_person(person) #有些书目的评价人数显示少于十人,爬取过程中会出现错误,用一个函数来处理
title=title.get_text().split()
#当没有译者信息时,会显示IndexError,我们分开处理
except IndexError:
author=detil.get_text().split(“/”, 3).split()
yizhe=””#将detil信息划分为4部分提取,译者信息直接设置为空,其他与上面一样
publish=detil.get_text().split(“/”, 3)
time=detil.get_text().split(“/”, 3).split().split(“-“)
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except (IndexError,TypeError):
#出现其他错误信息,忽略,继续执行(有些书目信息下会没有出版社或者出版年份,但是数量很少,不影响我们大规模爬取,所以直接忽略)
except TypeError:
#提取评价人数的函数,如果评价人数少于十人,按十人处理
def ceshi_person(person):
person = int(person.get_text().split()) – 4>)
except ValueError:
person = int(10)
return person
#分情况提取价格的函数,用正则表达式找到含有特殊字符的信息,并换算为“元”
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
price = price
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
price = price
return price
实验成功后,我们就可以爬取数据并导入到数据库中了,以下为全部源码,特殊情况会用注释一一说明。
import requests
from bs4 import BeautifulSoup
import time
import pymysql
from channel import channel #这是我们之一个程序爬取的链接信息
import random
def ceshi_person(person):
person = int(person.get_text().split()) – 4>)
except ValueError:
person = int(10)
return person
def ceshi_priceone(price):
price = detil.get_text().split(“/”, 4).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
price = price
return price
def ceshi_pricetwo(price):
price = detil.get_text().split(“/”, 3).split()
if re.match(“USD”, price):
price = float(price) * 6
elif re.match(“CNY”, price):
price = price
elif re.match(“\A$”, price):
price = float(price) * 6
price = price
return price
#这是上面的那个测试函数,我们把它放在主函数中
def mains(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode(“utf-8”), “lxml”)
tag=url.split(“?”).split(“/”)
detils=soup.select(“#subject_list > ul > li > div.info > div.pub”)
scors=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums”)
persons=soup.select(“#subject_list > ul > li > div.info > div.star.clearfix > span.pl”)
titles=soup.select(“#subject_list > ul > li > div.info > h2 > a”)
for detil,scor,person,title in zip(detils,scors,persons,titles):
l = #建一个列表,用于存放数据
author=detil.get_text().split(“/”,4).split()
yizhe= detil.get_text().split(“/”, 4)
publish=detil.get_text().split(“/”, 4)
time=detil.get_text().split(“/”, 4).split().split(“-“)
price=ceshi_priceone(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except IndexError:
author=detil.get_text().split(“/”, 3).split()
publish=detil.get_text().split(“/”, 3)
time=detil.get_text().split(“/”, 3).split().split(“-“)
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else “”
person=ceshi_person(person)
title=title.get_text().split()
except (IndexError,TypeError):
except TypeError:
l.append()
#将爬取的数据依次填入列表中
sql=”INSERT INTO allbooks values(%s,%s,%s,%s,%s,%s,%s,%s,%s)” #这是一条sql插入语句
cur.executemany(sql,l) #执行sql语句,并用executemary()函数批量插入数据库中
conn.commit()
#主函数到此结束
# 将Python连接到MySQL中的python数据库中
conn = pymysql.connect( user=”Root”,password=”123123″,database=”python”,charset=’utf8′)
cur = conn.cursor()
cur.execute(‘DROP TABLE IF EXISTS allbooks’) #如果数据库中有allbooks的数据库则删除
sql = “””CREATE TABLE allbooks(
title CHAR(255) NOT NULL,
scor CHAR(255),
author CHAR(255),
price CHAR(255),
time CHAR(255),
publish CHAR(255),
person CHAR(255),
yizhe CHAR(255),
tag CHAR(255)
cur.execute(sql) #执行sql语句,新建一个allbooks的数据库
start = time.clock() #设置一个时钟,这样我们就能知道我们爬取了多长时间了
for urls in channel.split():
urlss= #从channel中提取url信息,并组装成每一页的链接
for url in urlss:
mains(url)#执行主函数,开始爬取
print(url)#输出要爬取的链接,这样我们就能知道爬到哪了,发生错误也好处理
time.sleep(int(format(random.randint(0,9)))) #设置一个随机数时间,每爬一个网页可以随机的停一段时间,防止IP被封
end = time.clock()
print(‘Time Usage:’, end – start) #爬取结束,输出爬取时间
count = cur.execute(‘select * from allbooks’)
print(‘has %s record’ % count)#输出爬取的总数目条数
# 释放数据连接
cur.close()
conn.close()
这样,一个程序就算完成了,豆瓣的书目信息就一条条地写进了我们的数据库中,当然,在爬取的过程中,也遇到了很多问题,比如标题返回的信息拆分后中会有空格,写入数据库中会出现错误,所以只截取了标题的之一部分,因而导致数据库中的一些书名不完整,过往的大神如果有什么办法,还请指教一二。
等待爬取的过程是漫长而又欣喜的,看着电脑上一条条信息被刷出来,成就感就不知不觉涌上心头;然而如果你吃饭时它在爬,你上厕所时它在爬,你都已经爬了个山回来了它还在爬时,便会有点崩溃了,担心电脑随时都会坏掉(还是穷学生换不起啊啊啊啊~)
如何通过python操作xampp里面的MySQL数据库
您好,
conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,port=3306)
cur=conn.cursor()
conn.select_db(‘python’)
count=cur.execute(‘瞎脊select *
from test’磨仿渗)
‘there has %s rows record’ % count
result=cur.fetchone()
‘ID: %s info %s’ % result
resuLTS=cur.fetchmany(5)
for r in results:
cur.scroll(0,mode=’absolute’)
results=cur.fetchall()
for r in results:
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
“Mysql Error %d: %s”大握 % (e.args, e.args)python爬虫导入数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python爬虫导入数据库,Python爬虫的数据入库操作,如何用python爬取豆瓣读书的数据,如何通过python操作xampp里面的MySQL数据库的信息别忘了在本站进行查找喔。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
Python如何工作
Python的特色简单Python是一种代表简单主义思想的语言。 阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。 它使你能够专注于解决问题而不是去搞明白语言本身。 易学就如同你即将看到的一样,Python极其容易上手。 前面已经提到了,Python有极其简单的语法。 免费、开源Python是FLOSS(自由/开放源码软件)之一。 简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。 FLOSS是基于一个团体分享知识的概念。 这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。 如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。 这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!解释性这一点需要一些解释。 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。 这个过程通过编译器和不同的标记、选项完成。 当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。 而Python语言写的程序不需要编译成二进制代码。 你可以直接从源代码 运行 程序。 在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。 事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。 由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。 面向对象Python即支持面向过程的编程也支持面向对象的编程。 在 面向过程 的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。 在 面向对象 的语言中,程序是由数据和功能组合而成的对象构建起来的。 与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。 可扩展性如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。 可嵌入性你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。 丰富的库Python标准库确实很庞大。 它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。 记住,只要安装了Python,所有这些功能都是可用的。 这被称作Python的“功能齐全”理念。 除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
python怎么把数据库加入到配置表里并调用
操作如下:1.首先在mysql管理工具上面新建一个表,设置表中的字段。 2.使用的mysql管理工具是Navicat for MySQL,打开工具,选择表所在的数据库。 3.然后点击数据库名字,右键数据,出来下拉菜单选择import wizard。 4.点击next,选择对应的excel文件。
Python学习完可不可以做人工智能的工作?
Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
这是一门应用面很广的语言,对应的岗位有很多:
1、人工智能
Python是人工智能的黄金语言,选择人工智能作为就业方向是理所当然的;
2、大数据
Python在大数据上比Java更加有效率,大数据虽然难学,但是Python可以更好地和大数据对接,尤其是大数据分析这个方向;
3、网络爬虫工程师
网络爬虫是数据采集的利器,利用Python可以更快的提升对数据抓取的精准程度和速度;
4、Python web全栈工程师
全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人,也叫全端工程师(同时具备前端和后台能力);
5、Python自动化运维
运维工作者对Python的需求也很大;
6、Python自动化测试
Python十分高效,目前做自动化测试的大部分的工作者都需要学习Python帮助提高测试效率。 用Python测试也可以说是测试人员必备的工具了。
7、数据科学
Python有很多数据包是专门用来做数据科学,不过数据科学语言的知识背景也挺宽的,从统计学到计算机理论每一个分支都需要不断学习才可以做到与时俱进。
所以学校Python是可以做人工智能的
发表评论