Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言
- Python环境搭建与基础知识
- 爬虫原理概述
- 爬虫技术概览
- 猫眼电影排行数据抓取
- Ajax数据爬取猫眼电影票房
- 更多进阶,代理、模拟登陆、APP 爬取等…..
Python环境搭建与基础知识
Python环境搭建
Anaconda安装
IDE环境搭建
1.1Python 基础技术
- 数据类型
- 列表
- 循环语句
- 判断语句
- 函数
Python基础
- Python3 教程 | 菜鸟教程
- Python教程 | 廖雪峰的官方网站
- Python 教程| 简明教程
- Python教程™
- 笨办法学Python | 看云
- The Python Tutorial | Python 3.6.6 documentation
Python官方文档,具有绝对的权威和全面,但是文档本身是英文,所以对大部分初学者来说并不是很友好,下面是国人翻译的Python版本,对英文感冒的读者可以选择该版本学习:
- Python 入门指南 | python tutorial 3.6.3 documentation 一些入门的书籍推荐
- 《Python编程 从入门到实践》
- 《Python基础教程(第3版)》 Python进阶 对于想要提升自己技术的读者,接下的书籍和资料应该是很符合你的胃口了 :
- The Python Standard Library
- 《Python CookBook 3》
- 《流畅的Python》
- 《Python学习手册(第4版)》
- 《Python核心编程(第3版)》
- 《数据结构 Python语言描述》
- 《Python高性能编程》
爬虫是什么
爬虫原理
- 第一列Name:请求的名称,一般会将URL的最后一 部分内容当作名称。
- 第二列Status: 响应的状态码,这里显示为200,代表响应是正常的。通过状态码,我们可 以判断发送了请求之后是否得到了正常的响应。
- 第三列Type: 请求的文档类型。这里为document, 代表我们这次请求的是一个HTML文档,内容就是一些HTML代码。
- 第四列initiator: 请求源。用来标记请求是由哪个对象或进程发起的。
- 第五列Size: 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示from cache。
- 第六列Time:发起请求到获取响应所用的总时间。
- 第七列Waterfall:网络请求的可视化瀑布流。 接下来我们分析请求的详细组成,比如点第一个请求即Name为www.baidu.com的请求,如下图所示:
- Request URL为请求的URL
- Request Method为请求的方法
- Status Code为响应状态码,
- Remote Address为远程服务器的地址和端口
- HTTP/1.1为响应采用的协议和版本号 200 (状态码) OK(描述信息)
- Location为服务端需要客户端访问的页面路径
- Server为服务端的Web服务端名
- Content-Encoding为服务端能够发送压缩编码类型
- Content-Length为服务端发送的压缩数据的长度
- Content-Language为服务端发送的语言类型
- Content-Type为服务端发送的类型及采用的编码方式
- Last-Modified为服务端对该资源最后修改的时间
- Refresh为服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径
- Content-Disposition为服务端要求客户端以下载文件的方式打开该文件
- Transfer-Encoding为分块传递数据到客户端
- Set-Cookie为服务端发送到客户端的暂存数据
- Connection为维护客户端和服务端的连接关系
- GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
- Accept为客户端能接收的资源类型
- Accept-Language为客户端接收的语言类型
- Connection为维护客户端和服务端的连接关系
- Host: localhost为连接的目标主机和端口号
- Referer告诉服务器我来自于哪里
- User-Agent为客户端版本号的名字
- Accept-Encoding为客户端能接收的压缩数据的类型
- If-Modified-Since为缓存时间
- Cookie为客户端暂存服务端的信息
- Date为客户端请求服务端的时间 而我们需要做的就是模拟浏览器提交Requests Headers获取服务器的响应信息,从而得到我们想要的数据,想要深入了解的读者请访问HTTP | MDN文档了解更多信息。
爬虫能抓什么样的数据
爬虫技术概览
第一个请求
Requests库
Beautiful is better than ugly.(美丽优于丑陋) Explicit is better than implicit.(直白优于含蓄) Simple is better than complex.(简单优于复杂) Complex is better than complicated.(复杂优于繁琐) Readability counts.(可读性很重要)
# 导入requests 模块
import requests
# 发起Get请求并返回Response对象,包含服务器对HTTP请求的响应
response = requests.get('https://gitbook.cn/')
# 打印 响应状态码
print(response.status_code)
# 打印 str类型的响应体,比如一个普通的 HTML 页面,需要对文本进一步分析时,使用 text
print(response.text)复制代码
# 导入 requests 模块
import requests
# 需要提交的表单数据
data = {'name': 'ruo', 'age': 22
}
# 发起Post请求
response = requests.post("http://httpbin.org/post", data=data)
# 响应体内容
print(response.text)复制代码
# PUT请求
requests.put(“http://httpbin.org/put”)
# DELETE请求
requests.delete(“http://httpbin.org/delete”)
# HEAD请求
requests.head(“http://httpbin.org/get”)
# OPTIONS请求
requests.options(“http://httpbin.org/get”) 复制代码
# 导入 requests 模块
import requests
# 发起Get请求
response = requests.get("https://www.zhihu.com")
# 状态码
print(response.status_code)
# 响应体内容
print(r.text)复制代码
# 导入 requests 模块
import requests
# 在Headers中添加User-Agent字段信息
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
# 发起Get请求
response = requests.get("https://www.zhihu.com", headers=headers)
# 状态码
print(response.status_code)
# 响应体内容
print(response.text)复制代码
提取信息
正则表达式
# 导入 re 模块
import re
# 待匹配文本
h1 = '<H1>Chapter 3.2.1 - 介绍正则表达式</H1>'
# 将正则字符串编译成正则表达式对象,方便在后面的匹配中复用
pat = re.compile('<H1>(.*?)</H1>', re.S)
# re.search 扫描整个字符串并返回第一个成功的匹配
result = re.search(pat, h1)
# 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
print(result.group(0))
# 匹配的第一个括号内的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
print(result.group(1))复制代码
Xpath
import requests
# 导入lxml库的etree模块
from lxml import etree
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'
response = requests.get(url, headers=headers)
html = response.text
# 调用HTML类进行初始化
html = etree.HTML(html)
# 粘贴我们copy的xpath,提取电影名 “霸王别姬”
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
# 打印节点标签包含的文本内容
print(result_bawangbieji[0].text)
# 提取该页面所有电影名,即选择所有'dd'标签的电影名
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
# 打印所有提取出的电影名
print('该页面全部电影名:')
for one in result_all:print(one.text)复制代码
存储信息
TEXT 文本存储
import requests
from lxml import etree
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'
response = requests.get(url, headers=headers)
html = response.text
# 调用HTML类进行初始化
html = etree.HTML(html)
# 粘贴我们copy的xpath,提取电影名 “霸王别姬”
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
# 打印节点标签包含的文本内容
print(result_bawangbieji[0].text)
# 提取该页面所有电影名
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
# 打印所有提取出的电影名
print('该页面全部电影名:')
for one in result_all:print(one.text)
# 将这一页电影名存储至TEXT文件中,'a' 指打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。
with open('film_name.text', 'a') as f:for one in result_all:f.write(one + '\n')复制代码
CSV存储
import requests
from lxml import etree
# 导入CSV模块
import csvheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'response = requests.get(url, headers=headers)
html = response.text
html = etree.HTML(html)
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
print(result_bawangbieji[0].text)
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
print('该页面全部电影名:')
for one in result_all:print(one.text)
# 将这一页电影名存储至CSV文件中:
with open('film_name.csv', 'a', newline='') as f:csv_file = csv.writer(f)for one in result_all:csv_file.writerow([one.text])复制代码
MySQL 存储
import requests
from lxml import etree
# 导入pymysql模块
import pymysql# 打开一个数据库连接
db = pymysql.connect(host='localhost', user='root', password='root', port=3306, db='spider', use_unicode=True, charset="utf8")
# 获取MySQL的操作游标,利用游标来执行SQL语句
cursor = db.cursor()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'response = requests.get(url, headers=headers)
html = response.text
html = etree.HTML(html)
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
print(result_bawangbieji[0].text)
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
print('该页面全部电影名:')
for one in result_all:print(one.text)try:# 插入数据语句sql = 'INSERT INTO film_infor(film_name) values (%s)'cursor.execute(sql, (one.text))db.commit()except:db.rollback()复制代码
转载于:https://juejin.im/post/5ca8b27351882543fd4e36fb
Python爬虫入门实战之猫眼电影数据抓取(理论篇)相关推荐
- python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- python爬虫入门实战争胜法_Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- Python爬虫入门实战之猫眼电影数据抓取(实战篇)
项目实战 静态网页实战 本节我们将为大家展现一个完整爬虫的大致过程,此次项目内容为提取猫眼电影TOP100榜中的所有电影信息并存储至CSV文件中,其首页地址为http://maoyan.com/boa ...
- python 爬虫实例 电影-Python爬虫入门实战之猫眼电影数据抓取(实战篇)
电影名 上映信息 综合票房 票房占比 累计票房
- 猫眼api html,猫眼电影数据抓取
猫眼电影数据抓取实现分析 1.基准xpath: 匹配所有电影信息的节点对象列表 '//dl[@class="board-wrapper"]/dd' 2.遍历对象列表,依次获取每个电 ...
- python爬虫之Ajax动态加载数据抓取--豆瓣电影/腾讯招聘
动态加载数据抓取-Ajax 特点 1.右键 -> 查看网页源码中没有具体数据 2.滚动鼠标滑轮或其他动作时加载 抓取 1.F12打开控制台,页面动作抓取网络数据包 2.抓取json文件URL地址 ...
- Python爬虫4.2 — ajax(动态网页数据抓取)用法教程
Python爬虫4.2 - ajax[动态网页数据]用法教程 综述 AJAX 介绍 什么是AJAX 实例说明 请求分析 获取方式 实例说明 其他博文链接 综述 本系列文档用于对Python爬虫技术的学 ...
- python爬虫之app数据抓取_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider
1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程 ...
- 分页请求json数据_Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider
1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据,很不幸,虎嗅资讯网被我选中了,网址为 https://www.huxiu.com/ 爬的就是它的资讯频道,本文章仅供学习交流 ...
最新文章
- linux什么命令只显示ip,linux ip命令
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 三 NSArray
- 小技巧——让光驱符号定位在硬盘分区之后
- CF1063A Oh Those Palindromes
- 想进入谷歌吗?先来看看这些面试题吧
- matlab 两点划线,matlab学习2-画线
- Ratingbar UseGuide
- opcache引起的“php-cgi.exe - FastCGI 进程意外退出”,事件ID487
- 【原创】自己动手写控件----XSmartNote控件
- Scala编程指南——用更少的字做更多的事
- [转]Linq查询DataTable,DataRow
- OJ0428 二分查找F701
- DenseNet详解
- 暑假学习打卡【4】——北理工乐学第四周作业
- 把Sublime添加到Mac右键菜单
- Docker 问题集锦(19) - 解决:standard_init_linux.go:219: exec user process caused
- linux公社_如何在Linux中安装和使用dig和nslookup命令
- CVPR2019| 百度17篇CVPR论文学习记录(包含:无人驾驶、神经网络、GAN、无监督学习、目标检测)
- java jfreechart 折线图_java程序使用JfreeChart画折线图
- [agc015f]Kenus the Ancient Greek