1、爬虫基本原理

我们爬取中国电影最受欢迎的影片《红海行动》的相关信息。其实,爬虫获取网页信息和人工获取信息,原理基本是一致的。

人工操作步骤: 
1. 获取电影信息的页面 
2. 定位(找到)到评分信息的位置 
3. 复制、保存我们想要的评分数据

爬虫操作步骤: 
1. 请求并下载电影页面信息 
2. 解析并定位评分信息 
3. 保存评分数据

综合言之,原理图如下:

2、爬虫的基本流程

简单来说,我们向服务器发送请求后,会得到返回的页面;通过解析页面之后,我们可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。这样,我们想要的信息就被我们“爬”下来啦~

3、安装python依赖包 Requests+Xpath

Python 中爬虫相关的包很多:Urllib、requsts、bs4……我们从简单 requests+xpath 上手!更高级的 BeautifulSoup 还是有点难的。

然后我们安装 requests+xpath 的应用包以爬取豆瓣电影:

在Windows 终端分别输入以下两行代码:

  • pip install requests
  • pip install lxml

4、代码整理--获取豆瓣电影目标网页并解析

我们要爬取豆瓣电影《红海行动》相关信息,目标地址是:https://movie.douban.com/subject/26861685/

给定 url 并用 requests.get() 方法来获取页面的text,用 etree.HTML() 来解析下载的页面数据“data”。

 url = 'https://movie.douban.com/subject/26861685/'
 data = requests.get(url).text
 s=etree.HTML(data)

5、获取电影名称

获取元素的Xpath信息并获得文本:

file=s.xpath('元素的Xpath信息/text()')

这里的“元素的Xpath信息”是需要我们手动获取的,获取方式为:定位目标元素,在网站上依次点击:右键 > 检查

快捷键“shift+ctrl+c”,移动鼠标到对应的元素时即可看到对应网页代码:

在电影标题对应的代码上依次点击 右键 > Copy > Copy XPath,获取电影名称的Xpath:

这样我们就把元素中的Xpath信息复制下来了:

//*[@id="content"]/h1/span[1]

放到代码中并打印信息:

film=s.xpath('//*[@id="content"]/h1/span[1]/text()')
print(film)

6、 代码以及运行结果

以上完整代码如下:

import requests from lxml
import etree url = 'https://movie.douban.com/subject/26861685/'
data = requests.get(url).text
s=etree.HTML(data)
film=s.xpath('//*[@id="content"]/h1/span[1]/text()') print (film)

在 Pycharm 中运行完整代码及结果如下:

至此,我们完成了爬取豆瓣电影《红海行动》中“电影名称”信息的代码编写,可以在 Pycharm 中运行。

7、 获取其它元素信息

除了电影的名字,我们还可以获取导演、主演、电影片长等信息,获取的方式是类似的。代码如下:

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')             #导演
actor1=s.xpath('//*[@id="info"]/span[3]/span[2]/span[1]/a/text()')  #主演1
actor2=s.xpath('//*[@id="info"]/span[3]/span[2]/span[2]/a/text()')  #主演2
actor3=s.xpath('//*[@id="info"]/span[3]/span[2]/span[3]/a/text()')  #主演3
time=s.xpath(‘//*[@id="info"]/span[12]/text()')                       #电影片长

观察上面的代码,发现获取不同“主演”信息时,区别只在于“span[x]”中“x”的数字大小不同。实际上,要一次性获取所有“主演”的信息时,用不加数字的“a”表示即可。代码如下:

actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')  #主演

完整代码如下:

import requests
from lxml import etree

url = 'https://movie.douban.com/subject/26861685/'
data = requests.get(url).text
s=etree.HTML(data)

film=s.xpath('//*[@id="content"]/h1/span[1]/text()')               #导演
director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')    #导演
actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')        #主演
time=s.xpath('//*[@id="info"]/span[12]/text()')                        #电影片长

print('电影名称:',film)
print('导演:',director)
print('主演:',actor)
print('片长:',time)

在 Pycharm 中运行完整代码结果如下:

8、 关于解析神器 Xpath

Xpath 即为 XML 路径语言(XML Path Language),它是一种用来确定 XML 文档中某部分位置的语言。

Xpath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。起初 Xpath 的提出的初衷是将其作为一个通用的、介于 Xpointer 与 XSL 间的语法模型。但是Xpath 很快的被开发者采用来当作小型查询语言。

Xpath解析网页的流程:

1. 首先通过Requests库获取网页数据 
2. 通过网页解析,得到想要的数据或者新的链接 
3. 网页解析可以通过 Xpath 或者其它解析工具进行,Xpath 在是一个非常好用的网页解析工具

常见的网页解析方法比较

    • 正则表达式使用比较困难,学习成本较高
    • BeautifulSoup 性能较慢,相对于 Xpath 较难,在某些特定场景下有用
    • Xpath 使用简单,速度快(Xpath是lxml里面的一种),是入门最好的选择

Python爬虫实践 -- 记录我的第二只爬虫的更多相关文章

  1. Python爬虫实践 -- 记录我的第一只爬虫

    一.环境配置 1. 下载安装 python3 .(或者安装 Anaconda) 2. 安装requests和lxml 进入到 pip 目录,CMD --> C:\Python\Scripts,输 ...

  2. Python爬虫个人记录(三)爬取妹子图

    这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...

  3. Python爬虫学习记录【内附代码、详细步骤】

    引言: 昨天在网易云课堂自学了<Python网络爬虫实战>,视频链接 老师讲的很清晰,跟着实践一遍就能掌握爬虫基础了,强烈推荐! 另外,在网上看到一位学友整理的课程记录,非常详细,可以优先 ...

  4. Python爬虫个人记录(二) 获取fishc 课件下载链接

    参考: Python爬虫个人记录(一)豆瓣250 (2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!) 一.目的分析 获取http://bbs.fishc.com/for ...

  5. python爬虫实践

    模拟登陆与文件下载 爬取http://moodle.tipdm.com上面的视频并下载 模拟登陆 由于泰迪杯网站问题,测试之后发现无法用正常的账号密码登陆,这里会使用访客账号登陆. 我们先打开泰迪杯的 ...

  6. # Python 3 & 爬虫一些记录

    目录 Python 3 & 爬虫一些记录 交互模式和命令行模式 函数积累 语法积累 列表和元组 输入 交互模式下输入多行 爬虫 HTTP报文请求头User-Agent信息 解析库pyquery ...

  7. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  8. python编写知乎爬虫实践

    爬虫的基本流程 网络爬虫的基本工作流程如下: 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页 ...

  9. powershell中的两只爬虫

    --------------------序-------------------- (PowerShell中的)两只爬虫,两只爬虫,跑地快,爬网页不赖~~~ 一只基于com版的ie,一只基于.net中 ...

随机推荐

  1. Angularjs $http服务的两个request安全问题

    今天为了hybrid app和后端restful服务的安全认证问题,又翻了一下$http的文档,$http服务文档页面两个安全问题是json和XSRF,JSON那个比较好理解,就不补充什么了,说说XS ...

  2. Java自学?Java编程资源大放送

    黑马程序员 北京JavaEE就业班32期教程视频+源码+资料 链接: https://pan.baidu.com/s/1VCXyNVD-LvlZyReVgzKXGg 密码:cike 黑马:Java基础 ...

  3. 如何找某个样式属于哪个Element

    如果找不到样式所在的Element,那么可以参考排除法,逐个删除覆盖在同一位置的元素,如果该样式消失,那么可以判断为这个样式.

  4. 解决150%DPI下Photoshop不能显示成合适大小的问题

    Adobe官方这里一直不给力,只能靠自己动手了. 和解决CHM高分屏显示的步骤差不多: Ctril+R,输入regedit编辑注册表. 进入到 HKEY_LOCAL_MACHINE > SOFT ...

  5. Spring温故而知新 – AOP代理

    AOP的概念 AOP:Aspect-Oriented Programming(面向切面编程),维基百科的解释如下:Aspect是一种新的模块化机制,用来描述分散在对象.类或者函数中的横切关注点,从关注 ...

  6. 机器学习,流式IoT和医疗设备互联

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 让我们来看一下机器学习是如何应用于医护行业以及如何借助Apache Spark对患者的监控数据进行处理 现如今,IoT数据,实时流式数据分析 ...

  7. C语言 > 字符串和字符串函数

    输入 gets() 函数 : 1.gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区. 2.可以用来输入带空格的字符串. 3.可以无限读取, ...

  8. vue技术分享-你可能不知道的7个秘密

    前言 本文是vue源码贡献值Chris Fritz在公共场合的一场分享,觉得分享里面有不少东西值得借鉴,虽然有些内容我在工作中也是这么做的,还是把大神的ppt在这里翻译一下,希望给朋友带来一些帮助. ...

  9. PAT1059:Prime Factors

    1059. Prime Factors (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...

  10. VC++中字符串编码处理的一些相关问题

    前言 什么是tchar? 百度百科对其的定义如下": 因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包 ...