猫眼电影排行获取
本文基于Python下Requests库以及XPath解析模式获取猫眼电影排行。
构造请求,获取响应
在基本的爬虫申请中,第一步都是要构造请求,获取响应。而在Requests库中,获取响应需要用到get(),post(),delete()等方法,与Web中提交请求的方式重名。此处我们使用GET方式获取请求,并且构造Session使得每次GET都使用同一个Cookies,这样的好处是不易被服务器端识别出是爬虫从而拒绝访问。
def GetResponse(offset, session):
##获取响应的方法
url = "https://maoyan.com/board/4?offset="
newoff = (offset-1)*10
req = requests.Request('GET' , url+str(newoff), headers=headers)##构造请求
prepped = session.prepare_request(req)##准备请求
r = session.send(prepped)##发送请求
r.encoding = 'utf-8'
return r
返回值便是我们需要的响应内容。
解析响应
在Python中,解析响应的方法有很多,此处我们使用XPath来解析响应。首先构造HTML对象,然后使用XPath语法在HTML对象中找寻我们需要的内容(电影名,主演,上映时间,评分)。
def ParseResponse(response):
#根据响应处理请求并返回相应元组的方法
html = etree.HTML(response.text)
result = html.xpath('//div[@class="board-item-content"]')
print(len(result))
for each in result:
name = each.xpath('div[@class="movie-item-info"]/p[@class="name"]/a/text()')[0]
star = each.xpath('div[@class="movie-item-info"]/p[@class="star"]/text()')[0]
releasetime = each.xpath('div[@class="movie-item-info"]/p[@class="releasetime"]/text()')[0]
integer = each.xpath('div[@class="movie-item-number score-num"]/p/i[@class="integer"]/text()')[0]
fraction = each.xpath('div[@class="movie-item-number score-num"]/p/i[@class="fraction"]/text()')[0]
sult = ParseSingel(name, star, releasetime, integer, fraction)
yield sult
由于从HTML文档内获取到的内容并非直接可读的内容。比如评分,猫眼电影排行中,评分的整数段与小数段是分离的,我们需要通过一个方法将获取到的内容变成可读内容返回。此处也可以理解为在做数据预处理。
通过以上步骤,我们就将猫眼电影排行抓取下来了,至于数据存储部分,之后会有一篇文章专门讲述。笔者第一次写博文,有不足之处万望指出,共同进步,谢谢!