python爬虫学习过程
来源:互联网 发布:淘宝号的名字可以改吗 编辑:程序博客网 时间:2024/06/02 00:23
首先,如果你有别的语言的基础的话,我感觉可以直接入手python爬虫,然后通过具体实例来完善自己的python;如果没有的话,我感觉还是要答题上了解学习下python;
一:了解什么是python爬虫:这个百度什么都有很多解释。
二:对于urllib,urllib2库的了解使用,可以爬取网页的源代码,这是你爬取数据的第一步。当然这种源代码的爬取方法很多,request,post,get等等。
三:接下来我认为就是对你所需要的数据的爬取了,beautifulsoup,webdriver等方法都是很好的,这里有的数据标签可能还需要用到正则表达式。
四:当然python爬虫还有一些cookie和异常处理的一些功能,这方面我了解的较少。
下面是我自己学习过程中整理的别人的对我有用的一些资料,杂乱无章,大家将就看吧:
URL就是在浏览器端输入的 http://www.baidu.com 这个字符串
如下面的URI:
http://www.why.com.cn/myhtml/html1223/
URL是URI的一个子集
除了"http:",URL同样可以使用"ftp:","file:"等等来替代,HTTP是基于请求和应答机制的:
urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应,urllib仅可以接受URL
urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式就是
1. import urllib2
2. response=urllib2.urlopen('http://www.douban.com')
3. html=response.read()
· urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
客户端提出请求,服务端提供应答。
urllib2用一个Request对象来映射你提出的HTTP请求
Data数据的get和request传送
在HTTP中,这个经常使用熟知的POST请求发送。并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。
如果没有传送data参数,urllib2使用GET方式的请求
规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据
1. import urllib2
2.
3. req = urllib2.Request('http://www.baibai.com')
4.
5. try: urllib2.urlopen(req)
6.
7. except urllib2.URLError, e:
8. print e.reason 关于爬虫的异常处理
Beautifulsoup中find_all函数
find_all( name , attrs , recursive , string , **kwargs )
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件
爬取指定内容方法1:利用beautifulsoup和requests
方法2:利用selenium加chromedriver网页进行获取
http://www.cnblogs.com/cnkemi/p/6080288.html //webdriver定位元素法
. 匹配除“\n”之外的任意字符
2) * 匹配前一个字符0次或无限次
3) ? 匹配前一个字符0次或1次
4) + 匹配前一个字符1次或无限次
5) () 当我们需要一段内容的时候就用括号包围起来,不需要的内容放在括号外。
.* 贪心算法,匹配出最大满足条件的。就是能匹配到最大的字符串就取到最大的。
.*? 非贪心算法,匹配最小的满足条件的,多次。
以下可以放到熟悉一段时间后了解,写出来备查。
\ 转义字符,使后一个字符改变原来的意思
http://blog.csdn.net/shijie19930806/article/details/73716145 关于正则表达式学习的博客
import urllib
import urllib2
url = ‘http://www.server.com/login‘
user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘
values = {‘username‘ : ‘cqc‘, ‘password‘ : ‘XXXX‘ }
headers = { ‘User-Agent‘ : user_agent }
data = urllib.urlencode(values)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
page = response.read()
这样,我们设置了一个headers,在构建request时传入,在请求时,就加入了headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。
另外,我们还有对付”反盗链”的方式,对付防盗链,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应,所以我们还可以在headers中加入referer
例如我们可以构建下面的headers
1. values = {"username": "geek", "password": "**********"}
2. # 或者
3. values = {}
4. values["username"] = "geek"
5. values["password"] = "**********"
6. # 将字典编码
7. data = urllib.urlencode(values)
8. url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
9. request = urllib2.Request(url, data)
10. response = urllib2.urlopen(request)
11. print response.read()
构建post请求
1. # GET请求
2. values = {"username": "geek", "password": "**********"}
3. data = urllib.urlencode(values)
4. url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
5. request = url + "?" + data
6. response = urllib2.urlopen(request)
7. print response.read()
1. url = "http://www.server.com/login"
2. # 设置请求的身份,如果没有,服务器可能会没有响应
3. user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
4. values = {"username": "geek", "password": "**********"}
5. # 在headers中设置agent
6. headers = {"User-Agent": user_agent}
7. data = urllib.urlencode(values)
8. # 在request中添加headers
9. request = urllib2.Request(url, data, headers)
10. response = urllib2.urlopen(request)
11. page = response.read()
二、对付“反盗链”
1. # 对付“反盗链”(服务器会识别headers中的referer是不是它自己,如果不是则不响应),构建以下headers
2. headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
3. "Referer": "http://www.zhihu.com/articles"}
4. 这样,我们设置了一个headers,在构建request时传入,在请求时,就加入了headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。
1. # headers的一些其他属性:
2. # User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
3. # Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
4. # application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
5. # application/json : 在 JSON RPC 调用时使用
6. # application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
7. # 在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,网站君都不知道是谁在捣鬼了,这酸爽!
import urllib2
response =urllib2.urlopen('http://www.baidu.com', timeout=10)
timeout的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
- python爬虫学习过程
- 苦逼的Python爬虫学习过程
- 学习python爬虫
- python 爬虫学习一
- Python爬虫学习
- Python爬虫学习
- python爬虫学习
- Python学习--爬虫
- python学习爬虫
- Python 爬虫学习1
- Python 爬虫学习2
- python简单爬虫学习
- Python简单爬虫学习
- Python爬虫学习系列
- python + 机器学习 + 爬虫
- python 爬虫 学习
- python爬虫基础学习
- Python爬虫学习总结
- f2fs——FG_GC优化之从GREEDY算法修改为CAT算法并测试
- kettle入门(2)
- phoenix操作hbase报异常java.lang.ClassNotFoundException: org.iq80.snappy.CorruptionException
- If语句
- ubuntu14.04通过github安装nmap、zmap、masscan、whatweb
- python爬虫学习过程
- vi替换
- while语句
- Tensorflow 构建 TFrecords
- Linux 正则表达式
- Error Stack
- hdu 6053 TrickGCD 容斥原理(莫比乌斯工具)
- 代理模式
- 【HOU 1702】ACboy needs your help again!(栈和队列-水题)