大创项目前传——爬虫阶段(1)
爬虫原理及前期准备
- 爬虫原理
- 前期准备
- 编译器
- 库
- 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)
数据库存储信息 Mysql数据库 安装Mysql Navicat For Mysql pymysql库 Mysql数据库 安装Mysql Mysql的安装直接访问Mysql的官网即可进行下载和安装.h ...
- 120项优化: 超级爬虫Hawk 2.0重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
- 新浪微博爬虫阶段总结
首先,这是项目地址. 做这个爬虫的过程中,遇到了无数的坑,但是还好都填补上了,但是还是有几个问题实在是难以解决.暂时先记录如下. MySQL的bug?python执行时传入了正确的语句,但是却出现了插 ...
- Dangling meta character ‘?’ near index 0
分割符分离的时候 错了 String str = "testing??"; str = str.replaceAll("?", ""); 类 ...
- 四、Python复习教程(重点)-爬虫框架
目录导航: 文章目录 七.Python网络爬虫基础(上) 1. Python中的正则表达式 2. 正则表达式基础语法介绍 2.1 原子 非打印字符: 通用字符: 2.2 元字符 元字符: 2.3 模式 ...
- 数据爬虫 + 数据清洗 + 数据可视化,完整的项目教程!
一:数据挖掘 我选用了链家网做数据爬取场所(不得不唠叨一句,这个网站真是为了爬虫而生的,对爬虫特别友好哈哈哈,反扒措施比较少) 比如我们爬取贵阳市乌当区的所有房子的房价及其他信息: 比如我们爬取第一个 ...
- 零基础该如何系统地自学Python编程?五个阶段带你从小白到大佬
对于零基础学习或是已经学完基础不知道下一步该干什么的朋友,可以看看这篇缓解迷茫.今天分享下如何系统地自学Python规划目标,有一个学习目标在去行动. 有了目标,怎么行动呢?建议采用视频+书籍的方式进 ...
- python 网络爬虫介绍
一.网络爬虫相关概念 网络爬虫介绍 我们都知道,当前我们所处的时代是大数据的时代,在大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进 ...
- 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!
背景 用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github.com/scrapy/scrapy.Scrapy 的确是一个非常强大的爬虫框架,爬取效率高 ...
最新文章
- CodeForces - 1567C Carrying Conundrum(思维/状压)
- 玩转oracle 11g(36):rman备份-控制文件丢失恢复
- python文件操作的方法_python中文件操作的基本方法
- (6)通过输入参数(测量数据)构建三维体模型
- java.util.stream.LongStream
- 【C++】 29_类中的函数重载
- Flutter初步-第一个电视直播APP
- dreamweaver+cs6+android,使用Dreamweaver cs6开发移动应用
- 浅析VO、DTO、DO、BO的概念、区别和用处
- 个人网站真能转成商业网站,你能么?
- javacv给本地视频添加水印
- Source-Code-Notebook(源码解析和逐行笔记)
- 私域引流工具及场景落地方法
- Android中的Adapter
- 03 CarbonData的数据管理(建表)
- 微位科技李子阳:Knocknock諾客—从个人通讯录到区块链身份节点
- [附源码]java毕业设计网上书店管理系统
- 图解!《养老机构服务安全基本规范》—养老第一项强制性国家标准
- 官宣 | 效率源文档修复神器正式出道:超高性价比工具,破损文档1秒修复
- C++项目 - 负载均衡OJ - 1 - 项目概述