Python爬虫学习①:

前言:本文系根据唐松《Python网络爬虫从入门到实践》书籍进行学习和整理

Python 爬虫的流程分为了三部分

①:获取网页:给网址发送一个请求,该网址返回整个网页的数据

需要的技术:

1>requests,urlib,和selenium

2>多进程多线程抓取,登录抓取,突破IP封禁,使用服务器抓取

②:解析网页:把从整个网页的数据进行提取

1>re正则表达式,BeautifulSoup,和lxml

2>解决中文乱码

③:存储数据

1>基础技术:存入txt文件和存入csv文件

2>进阶技术:存入MySQL数据库和MongoDB数据库

静态网页抓取:

1>r.text,服务器响应的内容

2>r.encoding服务器使用的文本编码

3>r.status_code检测响应状态的状态码,如果返回200则请求成功,如果返回4xx则客户端错误,如果返回5xx表示服务器错误。

定制Request:

①传递URL参数

我们在URL的查询字符串后加入某些数据就可以请求特定的数据,一般这个数据跟在我们自己构建的URL的问号后面,在Request中,我们把这些参数保存在字典里,并用param(参数)构建到URL中。例如摘录下书中的代码

import requests
key_dict={'key':'value1','key2':'value2'}
r =requests.get('http://httpbin.org/get',params=key_dict)
print("URL已经正确编码",r.url) #查看URL的编码
print("字符串方式的响应体",r.text) #查看服务器的响应内容

我们进行执行后可以得到:

URL已经正确编码 http://httpbin.org/get?key=value1&key2=value2
字符串方式的响应体 {"args": {"key": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4", "X-Amzn-Trace-Id": "Root=1-5e848613-4f656156d734734c2a877716"}, "origin": "121.232.85.15", "url": "http://httpbin.org/get?key=value1&key2=value2"
}

通过这个文本我们对正确编码后的URL和服务器的响应内容r.text有了初步的了解

②:定制请求头:

请求头Headers提供了一系列关于请求,响应,和其他法案送实体的信息,如果没有指定请求头或者请求的请求头和实际网页不一致,可能无法返回正确的结果。

Request在最后的请求中才会把所有的请求头中的信息传递进去。

如何定制请求头呢,我们以我自己的博客网页为案例进行演示

打开Firefox浏览器进入博客园

右键,选择检查元素,单击网络选项,点击我们需要请求的网页

这里可以看到请求头的部分信息为:

Host:
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.cnblogs.com/
Connection: keep-alive

这个时候根据请求头可以把原先的代码优化为

import requests
key_dict={'key':'value1','key2':'value2'}
headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0','Host':'www.cnblogs.com'
}r = requests.get('https://www.cnblogs.com/', headers=headers)
print("URL已经正确编码",r.url)
print("响应状态码",r.status_code)

我在编码的时候遇到这几个问题,当我们在请求头里多加个空格,或者将Host信息改为网址而不是我们得到的请求头信息里的Host,响应状态码会显示400表示客户端错误。

③:发送POST请求:

有时候我们需要发送一些编码为表单的数据,例如在登陆时候的请求,如果使用GET请求,密码将会暴露,使用POST请求,需要简单的传递一个字典给Requests的data参数,这个数据字典在发送请求的时候自动编码为表单形式

代码如下

import requests
key_dict={'key1':'value1','key2','value2'}
r =requests.post("http://httpbin.org/post",)
print(r.text)

在输出的结果我们可以看到

{"args": {}, "data": "", "files": {}, "form": {"key": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "22", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4", "X-Amzn-Trace-Id": "Root=1-5e848e24-1c1604a4b86a30aa4059ccfc"}, "json": null, "origin": "121.232.85.15", "url": "https://httpbin.org/post"
}

form变量的值即是我们发送的key_dict字典的内容,这样发送请求成功

④:超时

我们可以用Request在timeout参数设定的秒数结束之后停止等待响应,这样做使得避免服务器长时间不返回,导致爬虫程序一直等待,如果服务器在timeout内没有返回,那么会返回异常

#我们把之前代码的get稍作修改
r = request.get('https://www.cnblogs.com',timeout=0.001)
#执行时发生异常,这是因为服务器在短时间内没有返回
#而我们把代码改为如下就不会抛出异常
r = request.get('https://www.cnblogs.com',timeout=20)

Request爬虫实践:

#目标,在书本代码基础上爬取豆瓣TOP250榜单并且保存

import requests
from bs4 import BeautifulSoup
def Get_moives():headers = {'User-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0','Host':'movie.douban.com'}movie_list=[]for i in range(0,10):link ='http://movie.douban.com/top250?start='+str(i*25)#每个网页的URLr=requests.get(link,headers=headers)print(str(i+1),"页状态响应码",r.status_code)soup = BeautifulSoup(r.text, "lxml")div_list = soup.find_all('div',class_='hd')for each in div_list:movie = each.a.span.text.strip()with open("Top250电影榜单", "a+") as fl:fl.write(movie)fl.write('\n')movie_list.append(movie)return movie_list
moive = Get_moives()
print(moive)

Python爬虫学习①:相关推荐

  1. python爬虫正则表达式实例-python爬虫学习三:python正则表达式

    python爬虫学习三:python正则表达式 1.正则表达式基础 a.正则表达式的大致匹配过程: 1.依次拿出表达式和文本中的字符比较 2.如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符 ...

  2. Python爬虫学习系列教程

    大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫 ...

  3. 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导

    爬虫是大家公认的入门Python最好方式,没有之一.虽然Python有很多应用的方向,但爬虫对于新手小白而言更友好,原理也更简单,几行代码就能实现基本的爬虫,零基础也能快速入门,让新手小白体会更大的成 ...

  4. Python爬虫学习系列教程-----------爬虫系列 你值的收藏

    静觅 » Python爬虫学习系列教程:http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把 ...

  5. Python 爬虫学习 系列教程

    Python爬虫 --- 中高级爬虫学习路线 :https://www.cnblogs.com/Eeyhan/p/14148832.html 看不清图时,可以把图片保存到本地在打开查看... Pyth ...

  6. 从入门到入土:Python爬虫学习|实例练手|爬取LOL全英雄信息及技能||异步加载|初级难度反扒处理|寻找消失的API

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. 从入门到入土:Python爬虫学习|实例练手|详细讲解|爬取腾讯招聘网|一步一步分析|异步加载|初级难度反扒处理|寻找消失的API来找工作吧

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  10. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. CSS3与动画有关的属性transition、animation、transform对比
  2. mysql:通用查询日志general_log
  3. 【错误记录】Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求 )
  4. vscode-git中的U,M和D文件标记含义
  5. com组件 安全提示_【加粉利器】百度基木鱼通用微信组件上线
  6. 关于 tomcat 集群中 session 共享的三种方法
  7. 手把手教你如下在Linux下如何写一个C语言代码,编译并运行
  8. java:退出功能_Java 8:功能VS传统
  9. 了解Linux操作系统发展阶段
  10. UVa 11481 (计数) Arrange the Numbers
  11. 项目中获取系统的用例的基本步骤
  12. 宽字符编码和解码通用类[CodeWidthChartUtility]
  13. [C/C++]如何在ARM环境下进行开发
  14. android 个人标准身高计算器,Android开发:标准身高计算器应用的…
  15. 邮箱发大文件服务器怎么删除,Exchange 2010如何删除系统默认邮箱数据库
  16. FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)
  17. 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
  18. Microsoft SQL Server 数据库使用(二)
  19. 华为坠亡员工博客称“心累”
  20. 选择DC-DC开关电源控制器的实战过程

热门文章

  1. linux下编译Zero C ICE
  2. 计算机视觉术语,计算机视觉常用术语中英文对照.doc
  3. html5如何提交到邮箱,如何在html网页中提交表单直接发送到邮箱
  4. Wallabag——开源稍后读知识管理服务工具
  5. Linux for h4100 - installing Linux to the ipaq h4150 (老树出新芽)
  6. 数据库新技术前沿总结
  7. jQuery 鼠标悬停时放大图片的效果
  8. eNSP 配置简单静态路由 实现全网可达
  9. 词霸天下---词根290【-it- 走】
  10. 发现一个推特前端替代网站,可以直接浏览推特用户发布的内容。