简单的网页爬虫
简单的网页爬虫
一 、网络爬虫简述
1.1 - 什么是网络爬虫:
爬虫’技术是实现网页信息采集的关键技术之一,通俗来说,‘爬虫’就是一段用来批量、自动化采集网站数据的程序,几乎不需要人工干预。”
“爬虫”又称网页“蜘蛛”、网络机器人,它是一种按照一定规则自动抓取网页信息的程序或者脚本,通常驻留在服务器上。在Web网页中,既包含可供用户阅读的文字、图片等信息,还包含一些超链接信息。网络“爬虫”正是借助这些超链接信息来不断抓取网络上的其他网页
这种信息采集过程很像一个爬虫或蜘蛛在网络上漫游,网络‘爬虫’或网页‘蜘蛛’因此得名。
1.2 - 爬虫工作流程
1、选取URL
-
将URL对应的网页下载下来。 url是是互联网上标准资源的地址
2、解析URL
-
用Beautiful Soup 解析器,解析网页,生成剖析树(parse tree)
3、抓取内容
-
根据剖析树(parse tree)抓取想要的内容
4、存储内容
-
把抓取到的数据存储到文件和数据库
1.3 - 浏览器工作原理
二、环境准备
2.1-Python环境搭建
- 去Python官网 https://www.python.org/ 下载系统对应的版本 ,推荐安装Python 3 以上的版本,我这里用的是Python 3.7 版本的
- 自动帮我们添加的环境变量
- 测试是否安装成功?打开命令符窗口,输入
python
出现如下界面
2.2 - 开发工具Pycharm安装
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具安装成功后根据资料破解
可以去Pycharm https://www.jetbrains.com/pycharm/ 下载 Pycharm,我这里安装的是 Pycharm 2019
的版本
安装时网上随便找一段激活码,就可以破解啦。
如果觉得 英文 看得不舒服 可以 加入pycharm 的汉化包
参考文章 : https://blog.csdn.net/jia666666/article/details/81777017
这样就有中文界面啦。
注:导入中文包可能会导致设置功能不可用,解决方案见以上网址
2.3 - Pycharm 上配置Python 解释器
- 右下角选择添加解释器
- 添加已存在的解释器,解释器选择之前环境变量下的 python3.exe解释器
2.4 - 下载网页爬虫所需的模块
命令符下执行以下语句,导入requests
模块和bs4
模块
pip3 install requests
pip3 install bs4
下载完就可以在Lib\site-packages
目录看到啦
2.5 - 在pycharm上导入requests
模块和bs4
模块
file ->setting
三、网页爬虫示例
3.1 - 创建工程
3.2 - 示例代码
import urllib
import requests
from bs4 import BeautifulSoup
#打开文件
f = open("file.txt", 'w', encoding='utf-8')
#reponse = urllib.request.urlopen("http://www.quanshuwang.com/book/44/44683").read()
#reponse = reponse.decode("gbk")
#获取网页信息
reponse = requests.get("http://www.quanshuwang.com/book/44/44683")
#解码
reponse.encoding='gbk'
#解析网页
soup = BeautifulSoup(reponse.text,'html.parser')
print(soup)
book_names = soup.select(".dirconone li a")
print(book_names)
for book_name in book_names:
print(book_name)
chart_url = "链接地址:" + str(book_name['href'])+"\n"
chart_name="章节名:"+str(book_name['title'])+"\n"
data=chart_url+chart_name
print(data)
# 保存数据
f.writelines(data + '=======================' + '\n')
#关闭文件
f.close()
3.3 - 运行及结果
四、将爬虫的数据上传到MYSQL数据库
4.1- MYSQL下载及安装
参考以下文章:
https://jingyan.baidu.com/article/eb9f7b6da17ccc869364e8d9.html?qq-pf-to=pcqq.c2c
https://jingyan.baidu.com/article/fd8044fa10550d5031137adf.html
4.2 - Python连接MYSQL数据
参考来源:https://www.cnblogs.com/woider/p/5926744.html
由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 pymysql
模块。
pymysql 模块可以通过 pip 安装。但如果你使用的是 pycharm
IDE,则可以使用 project python 安装第三方模块。
[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按钮]
由于Python统一了数据库连接的接口,所以 pymysql 和 MySQLdb 在使用方式上是类似的:
pymysql.Connect()参数说明
host(str): MySQL服务器地址
port(int): MySQL服务器端口号
user(str): 用户名
passwd(str): 密码
db(str): 数据库名称
charset(str): 连接编码
connection对象支持的方法
cursor() 使用该连接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭连接
cursor对象支持的方法
execute(op) 执行一个数据库的查询命令
fetchone() 取得结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中的所有行
rowcount() 返回数据条数或影响行数
close() 关闭游标对象
代码示例:(把爬虫的数据存储到数据库)
import requests
from bs4 import BeautifulSoup
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "990124", "mydb", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS CHART")
sql = """CREATE TABLE CHART (
CHART_ID INT auto_increment Primary key ,
CHART_URL CHAR(100) NOT NULL,
CHART_NAME CHAR(100)
)"""
#执行SQL语句
cursor.execute(sql)
#请求url
respone=requests.get("http://www.quanshuwang.com/book/133/133940")
respone.encoding='gbk'
print(respone)
#解析
soup=BeautifulSoup(respone.text,"html.parser")
# print(soup)
charts=soup.select(".dirconone li a")
print(charts)
f=open('file.txt','w',encoding='utf-8')
for chart in charts:
chart_url="url:"+str(chart['href'])+"\n"
chart_name="章节名:"+str(chart['title'])+"\n"
# print(chart)
# print(chart_url)
f.writelines(chart_url+chart_name+"-----\n")
sql = 'INSERT INTO CHART(CHART_URL,CHART_NAME)VALUES("%s","%s")' % \
(chart_url, chart_name)
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# Rollback in case there is any error
db.rollback()
f.close()
# 关闭数据库连接
db.close()
运行结果: