玩转python爬虫

菜鸟阿都 等级 1128 0 0

    近几年来,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爬虫第三方常用库:

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

爬取静态网页数据:

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()')

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

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爬取数据时,需要安装对应版本的浏览器驱动器

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(爬虫协议)文件,规定了那些网页可以被访问,对于爬取公开的信息数据时,且不可对目标系统造成严重的破坏,所以我们呼吁,大家在利用各项技术开展工作的过程中,务必要符合各项技术规定和制度规范,一起为你、我、他创造文明的网络环境!

收藏
评论区

相关推荐

Python的环境搭建和下载
Python是一个跨平台、可移植的编程语言,因此可在windows、Linux和Mac OS X系统中安装使用。 安装完成后,你会得到Python解释器环境,可以通过终端输入python命令查看本地是否已经按照python以及python版本。这里有一点需要注意的是,如果没有将python的安装目录添加到环境变量中,会报错(python不是内部命令或外部命
Python编程基础(快速入门必看
Python编程基础一、Python语言基本语法 Python是一
python文件的第一行 #!/usr/bin/python3 是什么意思?
python文件的第一行代码通常在脚本语言的第一行会看到: !/usr/bin/env python或 !/usr/bin/python 首先要确定的一点是它不是注释。这两句话的目的都是指出你的python文件用什么可执行程序去运行它。1. !/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释
Ubuntu 常用命令记录
一、Python相关设置 ------------ 修改Python默认版本 ------------ cd /usr/bin sudo rm -rf python sudo ln -s /usr/bin/python3 /usr/bin/python 检查是否设置成功: python -V 安
Atom的python插件和常用插件
python: simplified-chinese-menu:中文汉化(英文差的) 代码高亮:Atom自带 自动补全:autocomplete-python 语法检查:linter-flake8 定义跳转:python-tools 代码运行:atom-runner (只能输出,不能输入),atom-python-run(Windows,可以输入
CentOS升级Python到2.7版本
查看python的版本 python -V Python 2.4.3 1.先安装GCC yum -y install gcc 2.下载Python-2.7.2 wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2 3.解压Python-2.7.2
Django学习笔记
1\. django-admin.py startproject mysite 2\. python manage.py help 3\. python manage.py runserver 4\. python 搜索路径为sys.path,运行时可追加目录至sys.path 5\. python模板使用: \>>> from django im
FreeBSD python安装MySQL
fetch https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.4.zip unzip MySQL-python-1.2.4.zip cd MySQL-python-1.2.4 python setup.py install ln -s /usr/loca
Linux下Python编程
linux下python编程可以使用sublime-text3来作为编辑器,很方便,而且linux默认就是有python2和python3环境安装的,我们只要安装sublime-text3即可进行python编程 sudo update-alternatives --install /usr/bin/python python /usr/bin/p
Python 3 教程
Python 3 教程 =========== ![python3](https://www.runoob.com/wp-content/uploads/2014/05/python3.png) Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,
Python List数据的遍历
方式一: <!-- lang: python --> app_list = [1234, 5677, 8899] <!-- lang: python --> for app_id in app_list: <!-- lang: python --> print app_id 输出: 123
Python中的参数传递与解析
Python传递命令行参数 ============= Python的命令行参数传递和C语言类似,都会把命令行参数保存到argv的变量中。对于python而言,argv是sys模块中定义的一个list。与C语言不同的是,python中并没有定义argc,要获得参数的个数,需要使用len(sys.argv) 当用户使用'python -c "command
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
人生苦短,我用Python。众所周知,Python目前越来越火,学习Python的小伙伴也越来越多。最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了方便大家学习Python,小编整理了一套Python和Pycharm安装详细教程,只要大家按照这个步骤来,就可以轻松的搞定Python和Pycharm的安装了。
Python解释器和IPython
简介 == 今天给大家介绍一下Python的一个功能非常强大的解释器IPython。虽然Python本身自带解释器,但是相对而言IPython的功能更加的强大。 Python解释器 ========= Python是自带解释器的,我们在命令行输入python即可进入python的解释器环境: $> pythonPython 2.7.15 (d
Python进阶丨如何创建你的第一个Python元类?
> **摘要:**通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类的行为和规则。元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一。通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。本文介绍以下概念: * * 什么是Python元类?