https://movie.douban.com/

直奔主题,给个要爬取的豆瓣电影地址,爬取热门电影名字。

右键选择查看网页源码,我们可以发现在网页静态源码里,是找不到‘来电狂想’这些关键字的。

通过检查网页,查看network下的XHR,我们可以找到对应的信息。说明我们想要爬取的这部分内容是通过Ajax从后台拿到的json数据。

copy link address得到访问的url:https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0

分析url,传入的参数:

{'type': 'movie', 'tag': '热门', 'page_limit': 50, 'page_start': 0} #数据类型是电影,标签是热门,返回数据总数50条,数据起始位置第0条

于是我们就可以写个脚本,将0-50条json数据里title字段的值(热门电影的名字)爬取下来。

from urllib.parse importurlencodefrom urllib.request importurlopen, Requestimportsimplejsonimportssl#伪装成浏览器

ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'base_url= 'https://movie.douban.com/j/search_subjects'd={'type': 'movie','tag': '热门','page_limit': 50,'page_start': 0

}#ssl验证问题:忽略不信任的证书。就可以访问该网站

context =ssl._create_unverified_context()#url编码后,传入Request()函数;headers参数伪装浏览器

req = Request('{}?{}'.format(base_url, urlencode(d)), headers={'User-agent': ua})

with urlopen(req, context=context) as res:

res= simplejson.loads(res.read()) #json转dict

for subject in res['subjects']:print(subject['title']) #取出电影名字

with open('douban.txt', 'a') as f:

f.write(subject['title'] + '\n')

部分结果:

小偷家族

蜘蛛侠:平行宇宙

三次元女友

悠哉日常大王剧场版:假期活动

独家记忆番外之相信爱

波西米亚狂想曲

白蛇:缘起

谁先爱上他的

“大”人物

无敌破坏王2:大闹互联网

来电狂响

神奇动物:格林德沃之罪

无名之辈

毒液:致命守护者

写到这里还有一个小知识点想记录一下。就是爬虫中最常见遇到的有SSL导致的‘urllib.error.URLError:

其实也就是https的问题:

HTTP(HyperText Transfer Protocol)超文本传输协议是浏览器和服务器之间传递信息的一种协议。HTTP以明文的方式发送信息,不进行任何的加密。所以如果攻击者截取了浏览器和服务器之间的报文,就可以直接获得其中的信息,如果里面包含了用户名、密码、银行卡号等敏感信息就很不安全了。

HTTPS(Hypertext Transfer Protocol Secure)超文本传输安全协议在HTTP基础上加入了SSL(Secure Sockets Layer)协议构建的可进行加密传输、身份验证的网络协议,来保证数据的安全。

HTTPS通过两种方法保证数据安全:

1.建立一个信息安全通道,来保证数据传输的安全

2.确认网站的真实性

https

http

需要CA(Cerfificate Authority)申请证书,需要一定费用

不需要CA证书

ssl加密传输

信息是明文传输

连接端口:443

连接端口:80

https工作原理:

1.客户端发起HTTPS请求(浏览器输入一个https网址,连接到服务器的443端口);

2.服务器端的配置(采用HTTPS协议的服务器必须有一套数字证书(一对公钥和私钥),可以自己制作(自己颁发的证书需要客户端验证通过),可以向组织申请(CA:发放、管理、废除数字证书的机构));

3.传送证书(公钥:包含证书颁发机构、过期时间等信息);

4.客户端解析证书(由客户端的TLS完成:验证公钥是否有效,如果发现异常,会弹出一个警告框,提示证书存在问题;如果没有问题,就会生成一个随机值,然后用证书对随机值加密);

5.客户端传送加密信息(传送证书加密后的随机值,让服务器端得到这个随机值。以后客户端和服务器端的通信就是通过这个随机值进行加密解密);

6.服务器端解密信息(服务器端用自己的私钥解密后,得到客户端传来的随机值(私钥)。然后内容通过该随机值(私钥)进行对称加密);

7.服务器端向客户端传输加密后的信息(这部分信息为步骤6中通过随机值进行加密的内容);

8.客户端解密信息(客户端通过该随机值对信息进行解密。所以整个过程即使被第三方监听到,也无法获取明文信息)。

爬虫时,会遇到因为https的ssl验证问题导致网站访问不了,通常的解决办法是在代码里忽略不信任的证书:

importssl

url= 'https://12306.cn/index/

context =ssl._create_unverified_context()

res= urlopen(url, context=context) #忽略不信任的证书就可以正常访问了

豆瓣爬虫python_python豆瓣的简单爬虫相关推荐

  1. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  2. python编写爬虫代码_python编写简单爬虫资料汇总

    爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2.BeautifulSoup实现简单爬虫,scrapy也有实现过.最近想更好的学习爬虫,那么就尽可能的做记录吧.这篇博客就我今天的一个学习 ...

  3. python爬虫ip限制_简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有一些反爬取意识,所以就有了本文了. 我先说说场景吧: 由于工作需要,平时有一大堆数据需要在网上查询,并归 ...

  4. 如何使用php写爬虫,PHP如何开发简单爬虫

    有时候因为工作.自身的需求,我们都会去浏览不同网站去获取我们需要的数据,于是爬虫应运而生,下面是开发一个简单爬虫的经过与遇到的问题.开发一个爬虫,首先你要知道你的这个爬虫是要用来做什么的.我是要用来去 ...

  5. python3爬虫小型代码_python3简单爬虫实现代码

    分享一个python实现的网络爬虫代码.转自:http://www.cnblogs.com/yes123/p/3761388.html 写了个python3的.代码非常简单就不解释了,直接贴代码. # ...

  6. python简单爬虫入门一_Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们BeautifulSoup的基本结 ...

  7. python如何爬虫股票数据_简单爬虫:东方财富网股票数据爬取(python_017)

    需求:将东方财富网行情中心的股票数据爬取下来,包括上证指数.深圳指数.上证A股.深圳A股.新股.中小板.创业板 等 一.目标站点分析 东方财富网的行情中心页面包含了所有股票信息.在左侧的菜单栏中包含了 ...

  8. python简单爬虫入门一_Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信息, 等于我们已经只知道如何用工具去浏览和检索内容,但是 ...

  9. python_2开发简单爬虫

    2017年12月03日 16:43:01 独行侠的守望 阅读数:204 标签: python爬虫 更多 个人分类: Python 编辑 版权声明:本文为博主原创文章,转载请注明文章链接. https: ...

最新文章

  1. 一篇文章告诉你如何成为数据科学家
  2. HLG 1539 选课
  3. cocos2d-x游戏实例(25)-简易动作游戏(3)
  4. 终于把joomla 的 protostar 模版的菜单,从垂直改到水平了
  5. 双向广搜 8数码问题
  6. bst 删除节点_C ++程序查找具有N个节点的BST数量(加泰罗尼亚编号)
  7. SpringMVC学习笔记七:SpringMVC的数据验证
  8. 结构与表现分离的思想
  9. Kafka Consumer API示例
  10. 游戏编辑器研发第一天,对比思考确定底层技术和从0开发场景编辑器原因
  11. notepad++ 设置保护色
  12. 【06月12日】指数估值排名
  13. 为什么选择语音验证码?
  14. android studio找不到app moudle和project moudle
  15. 路飞学院 python_路飞学院-Python爬虫实战密训班-第1章
  16. harbor 下载地址(国内代理)
  17. 中国IM企业的新机会?揭秘融云全球通信云网络背后的技术 | 对话 WICC
  18. 怎么申请沙特SABER认证及流程如何
  19. Win32 程序开发:一个简单的Win32程序
  20. Anterior and posterior commissures

热门文章

  1. 双绕组变压器的参数计算中算短路实验时的电抗压降为什么是额定电流乘电抗再乘一个根号三呢,这个根号三何来?
  2. MyBatis 多对多 中间表插入数据
  3. 2021年危险化学品经营单位安全管理人员报名考试及危险化学品经营单位安全管理人员模拟考试题
  4. 扣丁音乐(五)——service实现歌曲播放功能
  5. RDIFramework.NET(.NET快速信息化系统开发框架) Web版介绍
  6. 【云原生-Jenkins】搭建CICD软件Jenkins最佳教程
  7. 使用blat在命令行下发送邮件
  8. 中学计算机课使用登记册,中学信息技术听课记录.doc
  9. unity菜单滑动插件_unity游戏清新风格列表滚动视图滑动界面插件Super ScrollView for UGUI 2.4.1...
  10. python smtplib.SMTP()发送邮件报“UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 0: i