在爬取网页之前,我们还需要做一些准备工作,需要我们首先安装上相关的包,requests和xpath,包的安装大家完全可以从网上进行搜索自行安装,这里我们也可以通过settings进行安装。
安装路径为:file→other settings→settings for new progects→project interpreter,选择弹窗中的加号,进行安装即可。
爬取步骤和一般爬虫项目的步骤是一模一样的,即导入相关的包→获取网页→解析网页→打印
具体代码如下:
import requests
from lxml import etree
url = 'https://movie.douban.com/subject/30252495/?tag=%E7%83%AD%E9%97%A8&from=gaia'
data = requests.get(url).text
s = etree.HTML(data)
film_name = 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[15]/text()')
print("电影名字为:",film_name)
print("电影导演为:",director)
print("电影演员为:",actor)
print("电影时长为:",time)
这样打印出来之后,可以看到程序在运行的时候,会出现错误,错误如下,出现这种错误,一般情况下是需要我们模拟一下浏览器,编写一下请求头。
C:\Python\python.exe C:/Users/Administrator/Desktop/项目实战/爬取豆瓣电影信息.py
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/项目实战/爬取豆瓣电影信息.py", line 8, in <module>
film_name = s.xpath('//*[@id="content"]/h1/span[1]/text()')
AttributeError: 'NoneType' object has no attribute 'xpath'
Process finished with exit code 1
我们将请求头添加上去以后,就可以看到可以正常获取到网页的信息了,完整的代码如下:
import requests
from lxml import etree
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'
} # 模拟访问者
url = 'https://movie.douban.com/subject/30252495/?tag=%E7%83%AD%E9%97%A8&from=gaia'
data = requests.get(url,headers = headers).text
s = etree.HTML(data)
film_name = 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[15]/text()')
print("电影名字为:",film_name)
print("电影导演为:",director)
print("电影演员为:",actor)
print("电影时长为:",time)
我们可以看到程序的运行结果为如下:
运行结果
C:\Python\python.exe C:/Users/Administrator/Desktop/项目实战/爬取豆瓣电影信息.py
电影名字为: ['1917']
电影导演为: ['萨姆·门德斯']
电影演员为: ['乔治·麦凯', '迪恩·查尔斯·查普曼', '科林·费尔斯', '本尼迪克特·康伯巴奇', '马克·斯特朗', '理查德·麦登', '安德鲁·斯科特', '丹尼尔·梅斯', '阿德里安·斯卡伯勒', '约翰·霍林沃思', '克里斯·瓦利', '杰米·帕克', '罗伯特‧马瑟', '贾斯汀·爱德华兹', '理查德·麦凯布', '理查德·德姆西', '安森·布恩', '雅各布·詹姆斯·贝西克', '特蕾莎·马奥尼', '皮普·卡特', '保罗·廷托', '安迪·阿波罗', '约瑟夫·戴维斯', '比利·波斯特莱斯韦特', '加布里埃尔·阿库乌迪克', '斯派克·莱顿', '亚当·赫吉尔', '纳巴汉·里兹万', '克莱尔·迪比尔克', '乔纳·罗素', '迈克尔·吉普森', '格伦·霍威尔']
电影时长为: ['119分钟']
Process finished with exit code 0
程序当中的难点,是解析部分的内容,下面我们来对照目标网页的源代码来获取指定部位的信息。
我们以获取电影名称这个部分为例子,可以了解到使用xpath来解析网页获取网页当中的内容,主要以div(块)为一个单元,在div下进行逐级寻找。
电影名称这个内容,是在一个div块下存在,该div的ID,这里可以理解为类为content,所以在编辑的时候,在括号里的//*[@id="content"],然后后面的内容,我们就需要逐级尽心寻找,每往下寻找一级加上反斜杠,最后这里的span[1]的意思是,第一个span,后面的text,代表着第一个span下的text内容。
了解以上规则之后,就可以开心的抓取信息啦
如果不会,就先从模仿开始吧,就像是婴儿在刚出生的时候,就需要开口说话一样,学习一门新的语言,也都是先从模仿开始的。
2020年2月29日
北京市通州区京贸中心