python爬虫数据采集

news/2024/7/19 11:30:49 标签: python, 爬虫

       近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。

       python爬虫是大家最为熟悉的一种python应用途径,由于python具有丰富的第三方开发库,所以它可以开展很多工作:比如 web开发(django)、应用程序开发(tkinter、wxpython、qt)、数据统计与计算(numpy)、图形图像处理、深度学习、人工智能等。平时自己使用最多的是python爬虫(结合tkinter,开发爬虫应用程序)和使用django开发一些小型个人网站,django框架可以自动根据实体类生成管理端,极大的提升了系统的开发效率,有兴趣的朋友可以尝试一下。

       一个成功的爬虫需要对应一个标准化的网站,爬虫主要是为了方便我们获取数据,如果目标系统开发不规范,无规则,很难用爬虫定制一套规则去爬取,并且爬虫基本是定制化的,对于不同的系统需要去调整。

       爬虫爬取数据的第一步必须分析目标网站的技术以及网站数据结构(通过前端源码),可借助chrome浏览器,目前python爬虫主要会面对一下三种网站

1. 前后端分离网站

        前端通过传递参数访问接口,后端返回json数据,对于此类网站,python可模拟浏览器前端,发送参数然后接收数据,便完成了爬虫数据的目标

2. 静态网站

         通过python的第三方库(requests、urllib),下载源码,通过xpath、正则匹配数据

3.动态网站

          如果采用第2种方法,下载的源码只是简单的html,源码中没有任何数据,因为此类动态网站需要js加载后,源码中才会有数据,对于此类网站,可以借助自动化测试工具selenium

爬虫步骤

  1. 分析网站技术与目标数据的结构
  2. 根据第一步分析结构,选择对应的技术策略
  3. 爬取数据
  4. 提升性能,提高操作舒适度(结合客户端技术,为爬虫定制界面)
  5. 根据需求进行数据清洗
  6. 数据储存,存储到数据库、文档

反扒机制

1. 当系统判断同属一个ip的客户端不间断多次访问,会拒绝此ip的访问

        解决方案:动态代理,不停的更换ip去访问目标系统,或者从免费的ip代理网站爬取ip,创建ip池,如果目标数据量不大,可通过降低访问速度,以规避反扒

2. 目标系统需要注册登录才能访问

        解决方案:通过python的第三方库(Faker)生成假登录名、密码、个人数据进行自动化注册、登录

3. 目标系统的中目标数据页面的链接需要处理才能进入目标数据页进行访问

         解决方案:获取到目标网站的目标数据页链接无法正常访问,需要研究页面中的js脚本,对链接进行处理,我个人曾通过搜狗浏览器爬取微信号文章时,就遇到过这个问题,爬取到的文章链接需要进过js脚本进行拼接,才能获得正确的链接地址

获取目标数据的位置

  1. 通过xpath获得数据的位置,可借助chrome浏览器调试功能获得对应数据的xpath路径
  2. 通过正则匹配

python爬虫第三方常用

python">urllib/requests  请求库
Faker            生成假数据
UserAgent        生成假数据头
etree、beautsoup 匹配数据
json             处理json数据
re               正则库
selenium         自动化测试库
sqlite3          数据库 python3自带

爬取静态网页数据

python">import requests
from fake_useragent import UserAgent  #提供假的请求头
from lxml import etree  # 匹配数据
#爬取目标页面的url
url='http://***ip****:8085/pricePublic/house/public/index'
headers= {'User-Agent':str(UserAgent().random)}
response=requests.get(url,headers=headers)
# 获得网页源码
content=response.text
html=etree.HTML(content)
#使用xpath查找对应标签处的元素值,pageNum此处爬取对应页面的页码
pageNum=html.xpath('//*[@id="dec"]/div[2]/div/span[1]/text()')

爬取前后端分离系统的数据

python">import json
import requests
#获取返回的response
url='http://***ip***/FindById/22'
response=requests.get(url)
#通过json库解析json,获得返回的数据
DataNode = json.loads(response.text).get('returndata').get('data')[0]

爬取动态数据

       以下代码示例采用google浏览器,使用selenium库,将浏览器设置为无头模式,爬虫会配合浏览器在后台模拟人工操作,根据代码中定义的xpath地址,爬虫会在浏览器中找到相应位置进行操作,使用selenium爬取数据时需要安装对应版本的浏览器驱动器

python">import requests
from faker import Faker
from fake_useragent import UserAgent
from lxml import etree
url='http://***ip***/FindById/22'
#通过faker库获得假email和电话号码
fake=Fakeer('zh_CN')
email=fake.email()
tel=fake.phone_number()
data={
"email":email
}
#使用requests库发送post请求
response=requests.post(url,data,headers=headers)
code=response.status_code
content=response.text
#获得返回的cookies并转换为字典形式
cookies = requests.utils.dict_from_cookiejar(response.cookies)
#请求的时候带上cookies
response=requests.get(url,headers=headers,cookies=cookies)

       作为一个合法的公民,爬虫只是一种技术,我们使用其爬取目标数据时,一定需要遵守一定的规则,每个网站的根目录下都会存在一个robots.txt(爬虫协议)文件,规定了那些网页可以被访问,对于爬取公开的信息数据时,且不可对目标系统造成严重的破坏,所以我们呼吁,大家在利用各项技术开展工作的过程中,务必要符合各项技术规定和制度规范,一起为你、我、他创造文明的网络环境!

关注微信公众号:菜鸟阿都


http://www.niftyadmin.cn/n/1690895.html

相关文章

linux环境部署springboot+vue项目

项目部署是一个程序员必备的技能,当项目开发过程中,需要将项目部署在开发服务器上,进行自测,或协助运维,测试进行环境的搭建配置,学会了项目部署,你就是团队中最亮的那个仔。 项目简介 后端&a…

mysql 存储自增_mysql使用自增Id为什么存储比较快

转自:https://blog.csdn.net/bigtree_3721/article/details/73151028InnoDB引擎表的特点1、InnoDB引擎表是基于B树的索引组织表(IOT)关于B树(图片来源于网上)B 树的特点:(1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;…

pageHelper分页失效解决方案

前言 pageHelper是一款优秀的Mybatis分页插件,在项目中可以非常便利的使用,使开发效率得到很大的提升,但不支持一对多结果映射的分页查询,所以在平时的使用时,对于一对多分页会出现分页错误,这篇文章主要对…

java list取前几条_《剑指Offer》-Java实现(5)

这一篇继续总结一些面试算法题的思路,首先还是先贴上github地址:《剑指Offer》——Java实现​github.com本节主要来回顾查找和排序的相关习题,目录如下:查找和排序(题目名称以题号--题目命名)七种排序方法总结与实现011--旋转数组…

阿里规范中为什么要求表必须有主键id

在web开发中,使用记录id获得详情信息是一个比较频繁的操作,所有必须具有很高的查询速度,这时,很多小伙伴就会想到使用索引,在id字段上添加索引。且慢!!! 接下来让阿都告诉你,为什么拦着你了。 在阿里java开…

STM32 串口代码配置

一、首先开发板上关于串口1的引脚配置已经配置好了,位置在SYSTEM的 usart.c 文件中(注意:只配置了串口1的,其他使用时需要自己配置) 重要的是明白配置的参数都是什么意思,针对实现不同的串口功能有什么影响…

c#mysql查询重复数据结构_C#数据结构算法 合链两个链表并去除链表中的重复数据...

合链两个链表并去除链表中的重复数据usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingDSList;//这个是自己写的算法生成的引用namespace_20100701{class Program{static void Main(string[] args){LinkList LLa new LinkList();LinkList…

SpringBoot项目热部署

前言 此篇文章主要介绍两种springboot项目热部署的方式,方式一是通过引入devtool组件实现热部署,方式二是通过idea下载jrebel插件实现热部署,jrebel免费试用30天,但通过激活网站可获得jrebel激活序列码,阿都对两种方式…