爬虫学习笔记
一.爬虫概念:按照一定规则,自动抓取网上信息的的程序和脚本
二.爬虫范围:表格,文本,图片加文本
三.爬虫作用:数据采集,软件测试.....
四.爬虫步骤:爬虫第一步:确定需求,今天爬虫的目的是什么。-
爬虫第二步:导入爬虫所需的库
import requests
import re
import time
爬虫第三步:确认爬取所需的url 和请求头
url=‘http://www.爬取的网址/’
headers=={‘User-Agent’:’ 自己的user-agent '}
爬虫第四步:requests 去获得网页数据
res=requests.get(headers=headers,url=url)
爬虫第五步:解析网页数据,得到自己想要的部分。
爬虫第六步:将获得的数据存储
简单分为三部分,链接数据库,像数据写入东西,断开数据库
链接如下
# 1、连接数据库
db = pymysql.connect(host="localhost", port=3306, user="root", password="qwe123", database="python", charset="utf8")
cursor = db.cursor()
创建,注意创建之后需手动去数据库里面修改字段的长度
try:
cursor.execute('create table catering_sale(num char primary key,date char)')
except:
print('数据库已存在!')
创建之后需要向数据库里写东西,此处注意一定要有commit()语句,否则程序可以运行,但是数据库中无结果。
# 插入数据语句
query = "insert into catering_sale (num, date) values(%s,%s)"
# 迭代读取每行数据
# values中元素有个类型的强制转换,否则会出错的
# 应该会有其他更合适的方式,可以进一步了解
for r in range(0, 10):
num = datalist[0][r]
date = datalist[1][r]
values = (str(num), str(date))
# print(values)
t= cursor.execute(query, values)
print(t)
db.commit()
# 关闭游标,提交,关闭数据库连接
# 如果没有这些关闭操作,执行后在数据库中查看不到数据
cursor.close()
db.close()
爬虫爬到数据库的代码
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request, urllib.error # 制定url,获取网页数据
import xlwt # 进行excel操作
import pymysql
import requests
def main():
baseurl = "https://data.eastmoney.com/zjlx/000035.html"
# 1.爬取网页
datalist = getData(baseurl)
print(len(datalist[0]))
# print(datalist[0])
# 3.保存数据
saveData(datalist)
print(baseurl,'姓名:***,学号:*******')
# 正则表达式的规则
findLink = re.compile(r'<li><a href="(.*?)">') # 创建正则表达式对象,表示规则(字符串模式)
findInq=re.compile(r'/">(.*)</a><span class="img">')
def askURL(url):
head = { # 模拟浏览器头部信息,向豆瓣服务器发送信息
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
# 用户代理,告诉豆瓣服务器我们是什么类型的机器、浏览器(本质上是告诉浏览器我们可以接收什么水平的内容)
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
# print(html)
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
#爬取网页
def getData(baseurl):
datalist = []
for i in range(0, 1): # 调用获取页面信息的函数 10 次
url = baseurl
html = askURL(url) # 保存获取到的网页源码
# print(html)
# 2.逐一解析数据
soup = BeautifulSoup(html, "html.parser")
# print(soup)
for item in soup.find_all('div', class_="mainnav"): # 查找符合要求的字符串,形成列表
# print(item)
data = [] # 保存一部电影的所有信息
item = str(item)
# 获取影片的超链接
link = re.findall(findLink, item) # re库用来通过正则表达式查找指定字符串
# print(link) #[0]表示只要可能的多个匹配对象的第一个
data.append(link) # 添加链接
inq = re.findall(findInq, item)
# print(inq)
data.append(inq)
datalist.append(data) # 把处理好的一部电影信息放入;list
datalist=datalist[0]
# print(datalist)
return datalist
def saveData(datalist):
print('save...')
# 1、连接数据库
db = pymysql.connect(host="localhost", port=3306, user="root", password="qwe123", database="python", charset="utf8")
cursor = db.cursor()
# 创建数据库,如果数据库已经存在,注意主键不要重复,否则出错
try:
cursor.execute('create table catering_sale(num char primary key,date char)')
except:
print('数据库已存在!')
# 插入数据语句
query = "insert into catering_sale (num, date) values(%s,%s)"
# 迭代读取每行数据
# values中元素有个类型的强制转换,否则会出错的
# 应该会有其他更合适的方式,可以进一步了解
for r in range(0, 10):
num = datalist[0][r]
date = datalist[1][r]
values = (str(num), str(date))
# print(values)
t= cursor.execute(query, values)
print(t)
db.commit()
# 关闭游标,提交,关闭数据库连接
# 如果没有这些关闭操作,执行后在数据库中查看不到数据
cursor.close()
db.close()
# # 重新建立数据库连接
# db = pymysql.connect(host="localhost", port=3306, user="root", password="qwe123", database="python", charset="utf8")
# cursor = db.cursor()
# # 查询数据库并打印内容
# cursor.execute('''select * from catering_sale''')
# results = cursor.fetchall()
# for row in results:
# print(row)
# # 关闭
# cursor.close()
# db.commit()
# db.close()
return 1
if __name__ == "__main__": # 当程序执行时
# 调用函数
main()
print("爬取完毕!")
爬到excel的汇
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request, urllib.error # 制定url,获取网页数据
import xlwt # 进行excel操作
def main():
baseurl = "https://data.eastmoney.com/zjlx/000035.html"
# 1.爬取网页
datalist = getData(baseurl)
# print(datalist)
# print(datalist[0])
# savepath = "./" #当前文件夹
savepath = ".\\东方财经35.xls" # 文件系统
# 3.保存数据
saveData(datalist, savepath)
print(baseurl,'姓名:***,学号:**********')
# 正则表达式的规则
findLink = re.compile(r'<li><a href="(.*?)">') # 创建正则表达式对象,表示规则(字符串模式)
findInq=re.compile(r'/">(.*)</a><span class="img">')
def askURL(url):
head = { # 模拟浏览器头部信息,向豆瓣服务器发送信息
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
# 用户代理,告诉豆瓣服务器我们是什么类型的机器、浏览器(本质上是告诉浏览器我们可以接收什么水平的内容)
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
# print(html)
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
#爬取网页
def getData(baseurl):
datalist = []
for i in range(0, 1): # 调用获取页面信息的函数 10 次
url = baseurl
html = askURL(url) # 保存获取到的网页源码
# print(html)
# 2.逐一解析数据
soup = BeautifulSoup(html, "html.parser")
# print(soup)
for item in soup.find_all('div', class_="mainnav"): # 查找符合要求的字符串,形成列表
# print(item)
data = [] # 保存一部电影的所有信息
item = str(item)
# 获取影片的超链接
link = re.findall(findLink, item) # re库用来通过正则表达式查找指定字符串
# print(link) #[0]表示只要可能的多个匹配对象的第一个
data.append(link) # 添加链接
inq = re.findall(findInq, item)
# print(inq)
data.append(inq)
datalist.append(data) # 把处理好的一部电影信息放入;list
datalist=datalist[0]
# print(datalist)
return datalist
def saveData(datalist, savepath):
print('save...')
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建workbook对象
sheet = book.add_sheet('东方财经', cell_overwrite_ok=True) # 创建工作表,可覆盖
col = ("链接", "概况", )
for i in range(0, 2):
sheet.write(0, i, col[i]) # 列名
for a in range(0, 2):
data = datalist[a]
for j in range(0, 15):
print("第%d条:" % (j + 1))
sheet.write(j+1, a, data[j]) # 数据
book.save(savepath) # 保存
if __name__ == "__main__": # 当程序执行时
# 调用函数
main()
print("爬取完毕!")