2021-10-18

爬虫学习笔记

.爬虫概念:按照一定规则,自动抓取网上信息的的程序和脚本

二.爬虫范围:表格,文本,图片加文本

.爬虫作用:数据采集,软件测试.....

.爬虫步骤:爬虫第一步:确定需求,今天爬虫的目的是什么。-
                       爬虫第二步:导入爬虫所需的库
                       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("爬取完毕!")
​

总代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值