爬虫原理及前期准备

  • 爬虫原理
  • 前期准备
    • 编译器
    • urllib库的基本使用
    • url的分析
    • Chrome开发者工具的使用
    • 一个错误

爬虫原理

网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。
爬虫的过程简而言之,从开发者所确定的url出发,通过分析在当前url获取的数据中找出类似的url,从而进行访问,继续获取数据。如此重复,即可以通过不断地访问url获得所有想要的数据。

前期准备

编译器

采用pycharm编译环境,使用python语言进行项目的开发。

urllib—指定URL,获取网页数据
BeautifulSoup—网页解析,获取数据
re—正则表达式,主要用来匹配文字信息,抓取需要的数据
目前所用库为此三种,后续有需要再进行添加。

urllib库的基本使用

urllib是最最基本的请求,属于python内置的http请求库,通过所要发起请求的链接,及提供一些相关的参数,可以进行访问和解析。
基本分为三个模块:
urllib.request—请求模块(主要)
urllib.error—异常处理模块
urllib.parse—解析模块
1、request模块
urlopen(url,data,timeout…)方法
url可以是字符串

#url可以是字符串
import urllib.requestresp = urllib.request.urlopen('http://www.baidu.com')
print(resp.read().decode('utf-8'))  # read()获取响应体的内容,内容是bytes字节流,需要转换成字符串

url可以是Request对象

##url可以是Request对象
import urllib.request
//将要访问的url封装成对象
request = urllib.request.Request('http://httpbin.org')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8')

data参数:主要用于post请求
注:关于get请求和post请求的异同可查阅
HTTP中的get与post方法相同与区别

# coding:utf8
import urllib.request, urllib.parse
//转化为字节流进行访问。post请求需要发送数据,这里封装了{'word','hello'}。
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
resp = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(resp.read())

timeout参数:设置请求超时的时间
在后续爬虫的过程中,可能会有出现错误或被反爬导致超时的现象。

# coding:utf8
#设置请求超时时间
import urllib.requestresp = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
print(resp.read().decode('utf-8'))

url的分析

以豆瓣Top250网页为例

访问https://movie.douban.com/top250?start=0
即豆瓣Top250首页,自然电影是从编号1开始的

那么再点击下一页之后,我们发现该页面上的电影从编号26开始。

这时通过观察网页链接,发现其变化与编号有亲密的联系,此时的网页链接为https://movie.douban.com/top250?start=25

那么分析猜想,是不是直接访问start=32的链接,所得到的网页第一个电影编号是33呢?
答案是肯定的,这里不再贴图。

如此,我们就可以通过一个初始url=(https://movie.douban.com/top250?start=25),将其封装为字符串对象,不断的对start=?的字符进行更改,就可以达到访问所有网页的目的。

Chrome开发者工具的使用

Google浏览器为我们提供了强大的功能,我们可以通过F12进入Chrome开发者工具。通过Elements栏可以对网页的信息进行定位,从而很快速的找到我们所要的数据在网页代码的哪一块。为后续的信息提取提供极大的便利。

一个错误

兴高采烈的直接使用urlopen(url)进行访问请求

import urllib.request
reponse = urllib.request.urlopen('https://movie.douban.com/top250?start=0&filter=')
print(reponse.read().decode('utf-8'))

程序出现了报错
HTTP Error 418 错误,是典型的被反爬。因为我们直接采用urlopen进行get访问请求,并没有对自身作任何的伪装。也就是说,我们直接告诉了对方我们是一个爬虫软件,想窃取你的网页信息,这么直白的请求,肯定是被打回的了。

大创项目前传——爬虫阶段(1)相关推荐

  1. 大创项目前传——存储阶段(1)

    数据库存储信息 Mysql数据库 安装Mysql Navicat For Mysql pymysql库 Mysql数据库 安装Mysql Mysql的安装直接访问Mysql的官网即可进行下载和安装.h ...

  2. 120项优化: 超级爬虫Hawk 2.0重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  3. 新浪微博爬虫阶段总结

    首先,这是项目地址. 做这个爬虫的过程中,遇到了无数的坑,但是还好都填补上了,但是还是有几个问题实在是难以解决.暂时先记录如下. MySQL的bug?python执行时传入了正确的语句,但是却出现了插 ...

  4. Dangling meta character ‘?’ near index 0

    分割符分离的时候 错了 String str = "testing??"; str = str.replaceAll("?", ""); 类 ...

  5. 四、Python复习教程(重点)-爬虫框架

    目录导航: 文章目录 七.Python网络爬虫基础(上) 1. Python中的正则表达式 2. 正则表达式基础语法介绍 2.1 原子 非打印字符: 通用字符: 2.2 元字符 元字符: 2.3 模式 ...

  6. 数据爬虫 + 数据清洗 + 数据可视化,完整的项目教程!

    一:数据挖掘 我选用了链家网做数据爬取场所(不得不唠叨一句,这个网站真是为了爬虫而生的,对爬虫特别友好哈哈哈,反扒措施比较少) 比如我们爬取贵阳市乌当区的所有房子的房价及其他信息: 比如我们爬取第一个 ...

  7. 零基础该如何系统地自学Python编程?五个阶段带你从小白到大佬

    对于零基础学习或是已经学完基础不知道下一步该干什么的朋友,可以看看这篇缓解迷茫.今天分享下如何系统地自学Python规划目标,有一个学习目标在去行动. 有了目标,怎么行动呢?建议采用视频+书籍的方式进 ...

  8. python 网络爬虫介绍

    一.网络爬虫相关概念 网络爬虫介绍 我们都知道,当前我们所处的时代是大数据的时代,在大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进 ...

  9. 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

    背景 用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github.com/scrapy/scrapy.Scrapy 的确是一个非常强大的爬虫框架,爬取效率高 ...

最新文章

  1. CodeForces - 1567C Carrying Conundrum(思维/状压)
  2. 玩转oracle 11g(36):rman备份-控制文件丢失恢复
  3. python文件操作的方法_python中文件操作的基本方法
  4. (6)通过输入参数(测量数据)构建三维体模型
  5. java.util.stream.LongStream
  6. 【C++】 29_类中的函数重载
  7. Flutter初步-第一个电视直播APP
  8. dreamweaver+cs6+android,使用Dreamweaver cs6开发移动应用
  9. 浅析VO、DTO、DO、BO的概念、区别和用处
  10. 个人网站真能转成商业网站,你能么?
  11. javacv给本地视频添加水印
  12. Source-Code-Notebook(源码解析和逐行笔记)
  13. 私域引流工具及场景落地方法
  14. Android中的Adapter
  15. 03 CarbonData的数据管理(建表)
  16. 微位科技李子阳:Knocknock諾客—从个人通讯录到区块链身份节点
  17. [附源码]java毕业设计网上书店管理系统
  18. 图解!《养老机构服务安全基本规范》—养老第一项强制性国家标准
  19. 官宣 | 效率源文档修复神器正式出道:超高性价比工具,破损文档1秒修复
  20. C++项目 - 负载均衡OJ - 1 - 项目概述

热门文章

  1. 微机接口串行口的测试
  2. Windows_U盘_SD卡_硬盘等存储介质无法完成格式化
  3. Python return函数返回值详解
  4. 泛微校招群面经历(一日游?)
  5. 既生 useState 何生 useReducer (主讲useReducer)
  6. SE:17.网络编程
  7. Navicat for MySQL 11注册码
  8. 云门囤:奇景、梦景、人间仙境
  9. DDoS攻击模拟与Metasploitable渗透
  10. 深度学习中的 BN (BatchNormalization)理解