返回顶部
首页 > 资讯 > 后端开发 > Python >一次爬虫实践记录
  • 662
分享到

一次爬虫实践记录

爬虫 2023-01-31 08:01:00 662人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言说明: 公司在2017年3月的时候开发过一个「数据中心」,是将有赞的用户和订单信息通过api拉取到自己开发的网站上,再结合我们自己和用户沟通的信息,组成一个简单的用户管理中心。数据中心虽然简单,但对我们意义非常大,它的出现标志着我们想

前言说明:

公司在2017年3月的时候开发过一个「数据中心」,是将有赞的用户和订单信息通过api拉取到自己开发的网站上,再结合我们自己和用户沟通的信息,组成一个简单的用户管理中心。数据中心虽然简单,但对我们意义非常大,它的出现标志着我们想要定位一个用户的时候告别了“办公室吼一吼”的纯人肉方法。

不过随着时间的推移,数据中心跟不上我们的业务发展,我们想在近期将其重新做一遍,进行一系列大的功能升级。别的都好说,唯一的问题是在过去一年半中,我们在数据中心添加了大量的信息,比如同学的微信号、昵称、他家长的信息、他的订单备注信息等等。随着远良的离职,后来的人已经很难从数据库中找出这些数据。在和伟锋探讨CRM的时候,我突然想到了可以用爬虫的手段,来将数据中心的数据全部爬取出来。于是便有了下面的代码,经过断断续续两三天的研究,我终于搞定了代码,顺利爬取了我们所有超过1万条的用户数据。

这里做一个技术记录,中间涉及到的知识点包括:

  1. 如何通过Network中的authorization,以及requests.session()维持登陆状态,以爬取不同的需要登陆以后才能查看的网页。这里面有个坑,就是我先用了session的方法来试图解决问题,但是怎么试都总是失败,反复查询后发现发现数据中心是用node.js来写的,而这样的网页用的是token来验证身份,session()那套行不通。最后我在头信息中发现authorization,直接粘到headers的信息才解决问题的;
  2. 查看网页源代码,如果你需要的信息不在源代码中,那就说明要找的内容在js文件中,在开发者模式下找到Network中的XHR或者JS,里面一般都会有某个JS文件包含你要的信息(header包含头信息,preview包含要爬取的信息,最上面的request URL则是要爬取内容所需要的网址信息)。
  3. 复习了JSON的使用方法。另外,不管是python还是json,爬取的关键都是找到循环点,因为循环点意味着有规律循环的开始;
  4. 复习了在Python中打开、写入csv文件的方式;
  5. 复习了在python中连接数据库的知识;python3 Mysql 数据库连接 - Pymysql 驱动
  6. 学习try...except的用法:将可能出现bug的代码写入try的部分,然后在except那里写入报错类型和报错的提示。报错提示可以根据需要自定义。这样的好处是程序出现bug的时候不会报错终止,而是会给出报错提示以后继续后面的运行,直到结束。(Python)异常处理try...except、raise
  7. 复习列表构造的知识;
  8. 简单学习了sql的基本操作语句 SQL基本语法
import requests
import json
import csv
import pymysql
import time


# 从数据库中获取所有的用户ID

yz_uids = []

db = pymysql.connect('192.168.31.24','root','root','danci_tddc') # 连接数据库
cursor = db.cursor() # 用cursor 方法获取操作游标
sql = "SELECT * FROM td_crm_customers" # 写sql语句
cursor.execute(sql) # 执行sql语句
data = cursor.fetchall() # 获取数据
for row in data:
    yz_uid = row[0]
    yz_uids.append(yz_uid)

db.close() # 关闭数据库连接



login_url = 'Http://data.testdaily.cn/#!/login'


headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
    'Referer': 'http://data.testdaily.cn/',
    'Cookie': 'Hm_lvt_fc5a4042b4f7e4c87111dce89bb04bea=1539932447,1540895924',
    'Authorization': 'Bearer eyJhbGCiOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OGI3ZWU4ZmI2NmVmZjEwMWM5NGVjODgiLCJ1c2VybmFtZSI6Inplbmd5aWNoYW8iLCJleHAiOjE1NDIxODA5OTksImlhdCI6MTU0MTU3NjE5OX0.dl7o4lnPZnfw7e606sVOrW4dYCKOMQJzSSMBHCFPAc4'
}

# 打开存储的csv文档
f = open('/Users/damo/Desktop/4.csv', 'w+')
writer = csv.writer(f)
writer.writerow(['user_id', 'wechat', 'nickname', 'majia', 'phone', 'address', 'name', 'tag', 'parentInfo', 'remark', 'update_time','trade_history'])

# 获取单个页面的数据
def get_info(url):

    try:
        # 读取客户详情页面并获取json数据
        res = requests.get(url,headers = headers)
        json_data = json.loads(res.text)

        user_id = json_data['user_id']
        wechat = json_data['wechat']
        if 'nickname' in json_data.keys():
            nickname = json_data['nickname']
        else:
            nickname = ''
        majia = json_data['tdAlias']
        phone = json_data['mobile']
        address = json_data['address']
        name = json_data['name']
        tag = json_data['tags']
        if 'parentsInfo' in json_data.keys():
            parentInfo = json_data['parentsInfo']
        else:
            parentInfo = ''
        if 'remark' in json_data.keys():
            remark = json_data['remark']
        else:
            remark = ''
        update_time = json_data['update_time']
        trade_history = json_data['trades']

        writer.writerow([user_id,wechat,nickname,majia,phone,address,name,tag,parentInfo,remark,update_time,trade_history]) # 将数据写入csv文件
    except TypeError:
        print(url + '有问题')

if __name__ == '__main__':
    urls = ['http://data.testdaily.cn/api/customers/{}'.fORMat(i) for i in yz_uids] # 构造列表表达式
    for url in urls:
        get_info(url)

--结束END--

本文标题: 一次爬虫实践记录

本文链接: https://lsjlt.com/news/192968.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一次爬虫实践记录
    前言说明: 公司在2017年3月的时候开发过一个「数据中心」,是将有赞的用户和订单信息通过API拉取到自己开发的网站上,再结合我们自己和用户沟通的信息,组成一个简单的用户管理中心。数据中心虽然简单,但对我们意义非常大,它的出现标志着我们想...
    99+
    2023-01-31
    爬虫
  • 『爬虫』学习记录
    ## 在学习爬虫中遇到很多坑,写出来供道友参考 出现诸如以下错误     ModuleNotFoundError: No module named 'js2xml'     NameError: name 'js2xml' is no...
    99+
    2023-01-31
    爬虫
  • python3 爬虫笔记(一)beaut
    很多人学习python,爬虫入门,在python爬虫中,有很多库供开发使用。 用于请求的urllib(python3)和request基本库,xpath,beautiful soup,pyquery这样的解析库。其中xpath中用到大量的...
    99+
    2023-01-30
    爬虫 笔记 beaut
  • Python爬虫基础之初次使用scrapy爬虫实例
    项目需求 在专门供爬虫初学者训练爬虫技术的网站(http://quotes.toscrape.com)上爬取名言警句。 创建项目 在开始爬取之前,必须创建一个新的Scrapy项目。进入您打算存储代码的目录中,运行下列...
    99+
    2022-06-02
    Python scrapy框架 Python爬虫
  • 记一次SQL优化的实战记录
    目录前言1. 创建表2. 需求3. 给表插入数据4. 开始根据需求写SQL4.1 第一版4.2 第二版4.3 第三版总结前言 昨天(2022-7-22)上线了我的一个功能,测试环境数据量较小,问题不大,但是上生产之后,直...
    99+
    2022-07-24
    sql优化最佳实践 SQL优化技巧 数据库SQL优化
  • 分布式爬虫scrapy-redis的实战踩坑记录
    目录一、安装redis1.首先要下载相关依赖2.然后编译redis二、scrapy框架出现的问题1.AttributeError: TaocheSpider object has n...
    99+
    2024-04-02
  • 一次MySQL Slave库恢复实战记录
    mysql> show slave statusG; *************************** 1. row *************************** Slave_IO_State:...
    99+
    2021-02-06
    一次MySQL Slave库恢复实战记录
  • 记录一次Windows2012 R2下,Sqlserver2
    Sqlserver异地备份实践 项目背景: 客户在线下IDC有一套业务系统运行在物理环境,winodws 2012 上运行着 Tomcat8+Sqlserver2014的企业内部流程系统,由于种种原因目前...
    99+
    2024-04-02
  • 一次java异步任务的实战记录
    目录前言一、什么是异步任务二、SpringBoot + Async三、踩坑日记四、解决五、总结前言 最近在开发中遇到一个埋点的需求,考虑到不能影响原有业务逻辑,于是准备写一个异步任务...
    99+
    2024-04-02
  • 一次nginx崩溃事件的实战记录
    目录一、事件描述二、检查分析三、处理四、附录总结一、事件描述 2023年春节复工第一天,项目组同事反馈说业务系统中图像处理代理Nginx服务于1月23日发生崩溃,完成了重启操作,检查...
    99+
    2023-01-31
    nginx 崩溃 nginx突然宕机 nginx崩溃事件
  • Node爬虫工具Puppeteer入门教程实践
    目录【Puppeteer概要】【Puppeteer 错误处理】Puppeteer Working with Chrome Extensions【Puppeteer class:pup...
    99+
    2024-04-02
  • python爬虫实践: 豆瓣小组命令行
    主要特性 前一阵重新组织了一下代码, 加了命令行help信息, 用起来更方便了一些 初步实现了豆瓣小组及用户相关的API爬虫和请求 基于requests和lxml, 没有用高阶的诸如scrapy之类的爬虫工具 所有的命令行输出都是标准的...
    99+
    2023-01-31
    爬虫 豆瓣 命令行
  • 一次docker登录mysql报错问题的实战记录
    目录起因解决方法附:docker下进入mysql命令行总结起因 最近想再重温重温MySQL,于是就打开VMware登上了我的小破机。想着之前在docker上面已经装过MySQL了,就...
    99+
    2024-04-02
  • 【Python | 边学边敲边记】第四次:初识爬虫框架Scrapy
    一、前言本系列上一篇:【Python | 边学边敲边记】第三次:URL去重策略今天给大家分享的是,Python里的爬虫框架Scrapy学习,包含python虚拟环境的搭建、虚拟环境的使用、Scrapy安装方法详解、Scrapy基本使用、Sc...
    99+
    2023-06-02
  • 一次简单的Oracle恢复Case实战记录
    发现问题 某网友的数据库由于坏盘了,并且存储掉电,导致数据库无法open了。单看其数据库alert log的错误来看,是非常之简单的,如下: Fri Oct 26 10:33:53 2018 Recov...
    99+
    2024-04-02
  • Python用yieldfrom实现异步协程爬虫的实践
    目录一、什么是yield二、yield于列表的区别三、yield from 实现协程一、什么是yield 如果还没有怎么用过的话,直接把yield看做成一种特殊的return(PS:...
    99+
    2023-01-18
    Python yield from异步协程爬虫 Python 异步协程爬虫
  • 一次现场mysql重复记录数据的排查处理实战记录
    目录前言 分析 数据总计 重复次数占比 where 和 having 的区别 总结 前言 我当时正好出差在客户现场部署调试软件,有一天客户突然找到我这里,说他们...
    99+
    2024-04-02
  • 一次MySQL启动导致的事故实战记录
    目录背景判断 MySQL 已完全启动的方式事故第一次修改第二次修改总结MySQL` 启动存在端口被监听, 但服务没完全启动的情况. 背景 MySQL 启动时会进行 第一次 初始化数据...
    99+
    2024-04-02
  • 一次NodeJS内存泄漏排查的实战记录
    目录前言案例一故障现象排查过程案例二故障现象排查过程问题原因node-v9.x 以下的版本node-v10.x 以上的版本修复泄露总结前言 性能问题(内存、CPU 飙升导致服务重启、...
    99+
    2024-04-02
  • 一次vue项目优化的实际操作记录
    目录前言一、CDN引入二、gzip压缩三、路由懒加载,这种最简单的了就不多说了四、打包不生成map文件五、router上面使用props传参数,导致页面加载时间很长总结前言 项目前端...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作