python3爬虫攻略(7):爬虫案例

上一篇学了xpath,那么我们趁热打铁,用xpath和python来写一个简单的小爬虫,爬取豆瓣电影top250的电影名字和评分,并将其写入到本地txt文件中。

好了进入正题。
通过对网页进行分析,我们可以看出所有的电影都在一个li标签中,这意味着我们可以利用同样的xpath规则找到它们
这里写图片描述
然后我们在分析每一个电影的具体情况
这里写图片描述
这里写图片描述
这里写图片描述
通过分析我们可以轻松的用xpath找到我们想要的信息
电影名://div[@class=”item”]//a//span[@class=”title”][1]/text()
评分://div[@class=”item”]//span[@class=”rating_num”]/text()
(这里我的xpath规则写的比较简陋,如果老铁追求完美的话,可以写的严谨一点!)

#获得评分列表
star_list=content.xpath('//div[@class="item"]//span[@class="rating_num"]/text()')
#获得电影名列表
name_list=content.xpath('//div[@class="item"]/a//span[@class="title"][1]/text()')
#将两个list列表整合为tuple列表
        info_list=zip(name_list,star_list)
        for info in info_list:
            #拼接信息
            info=info[0]+"(评分:"+info[1]+")\n"

这里我们使用了zip函数将将两个list列表整合为tuple列表,然后再将其重新拼接方便写入文件
关于zip函数的使用一张图,直接搞定
这里写图片描述
豆瓣电影top250一共有10,每一页的url地址如下
https://movie.douban.com/top250?start=0
https://movie.douban.com/top250?start=25
………………………………
https://movie.douban.com/top250?start=225
因此我们

#页码
self.index=0
self.url="https://movie.douban.com/top250?start="
#爬虫开关
self.switch=True
while self.switch==True:
    #拼接url并获取数据
    douban_url=self.url+str(self.index)
    #将url地址交给geinfo函数处理,获得信息
    self.getinfo(douban_url)
    #判断是否到了最后一页
    if self.index<225:
        self.index+=25
        time.sleep(3)
        else:
            #退出循环
            self.switch=False
            print("程序结束")

我们这样就可以搞定它!

完整代码如下

# -*- coding:utf-8 -*-
from urllib import request, parse
#使用lxml的etree库
from lxml import etree
import time
class DoubanMoive():
    def __init__(self):
        '''
            初始化一些数据
        '''
        #页码
        self.index=0
        self.url="https://movie.douban.com/top250?start="
        #爬虫开关
        self.switch=True

    def gethtml(self,url):
        '''
            处理加载页面
            将html解析为xml文档,并返回给getinfo函数
        '''
        headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
        req = request.Request(url, headers=headers)
        html = request.urlopen(req).read().decode("utf-8")
        content=etree.HTML(html)
        return content

    def getinfo(self,url):
        '''
            获取图片,名字,和评分等信息
            将信息交给download函数处理
        '''
        content=self.gethtml(url)
        #评分列表
        star_list=content.xpath('//div[@class="item"]//span[@class="rating_num"]/text()')
        #电影名
        name_list=content.xpath('//div[@class="item"]/a//span[@class="title"][1]/text()')
        #将两个list列表整合为tuple列表
        info_list=zip(name_list,star_list)
        for info in info_list:
            #拼接信息
            info=info[0]+"(评分:"+info[1]+")\n"
            #将追加信息写入到text文本中
            with open("douban.txt","a") as f:
                f.write(info)

    def startswitch(self):
        #判断爬虫是否执行
        while self.switch==True:
            #拼接url并获取数据
            douban_url=self.url+str(self.index)
            self.getinfo(douban_url)
            #判断是否到了最后一页
            if self.index<225:
                self.index+=25
                time.sleep(3)
            else:
                self.switch=False
                print("程序结束")

if __name__ == '__main__':
    douban=DoubanMoive()
    douban.startswitch()

运行结果:
这里写图片描述
250条不多不少,刚好爬取完毕!噢耶!
这里写图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值