Python爬虫入门案例(一)豆瓣电影Top250爬取(request+XPath+csv)

豆瓣电影top250是学习爬虫很好的入门案例。学习爬虫,首先我们应该清楚爬虫的流程。

一、流程分析

  • 1.访问网页, 获取网页回应(response)
    2.分析源码结构,通过xpath或其他解析方法获得所需的相应信息内容。
    3.通过csv方法将获取的内容存入文件中(新手可以先存入txt文件,这种方法比较简单)

二、代码实现与思路讲解

  1. 设置headers,设置编码解析格式,通过requests中的get方法获取网页回应。
    headers查看方式:
    进入网页,点击f12或查看开发者工具,点击Network-headers-User-Agent在这里插入图片描述
def get_response(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3534.4 Safari/537.36'}
    response = requests.get(url,headers=headers)
    response.encoding = 'UTF-8'
    return response.text

**

2.分析源码

在这里插入图片描述
通过查看源码,可以看出每个电影都是放置在li标签中的,这样我们就非常清晰。

def get_nodes(html):
    text = etree.HTML(html)
    nodes = text.xpath('//li/div[@class="item"]')  #锁定代码位置
    infos = []
    for node in nodes:
        try:
            key = {}
            key['movieName'] = str(node.xpath('.//span[@class="title"][1]/text()')).strip("[']")
            print(key['movieName'])
            firstInfo = node.xpath('.//div[@class="bd"]/p/text()')[0]
            secondInfo = node.xpath('.//div[@class="bd"]/p/text()')[1]
            key['director'] = str(firstInfo.split("主演:")[0]).strip().strip('导演:')
            key['actors'] = firstInfo.split("主演:")[1]
            key['time'] = secondInfo.split('/')[0]
            key['country'] = secondInfo.split('/')[1]
            infos.append(key)
        except:
            key['actors'] = None
    return infos

这样我们就可以爬取到电影名,导演,主演,上映时间,国家等电影信息。(如果对xpath语法有问题的同学可以去w3school官网去查看。语法相当简单好学)

3. 将信息写入csv文件

def save_file(infos):
    headers = ['电影名称','导演','主演','上映时间','国家']
    with open('DouBanMovieT250.csv','a+',encoding='UTF-8',newline='') as fp:
        writer = csv.writer(fp)
        writer.writerow(headers)
        for key in infos:
            writer.writerow([key['movieName'],key['director'],key['actors'],key['time'],key['country']])

这里我们先通过csv.writer(fp)方法生成一个csv对象。再通过这个对象来调用writerrow方法写入文件。到这里我们就完成了第一页的爬虫。
当然,我们的欲望不止爬取第一页。下面我们再来说一下翻页爬取。

if __name__  == '__main__':
    urls = ['https://movie.douban.com/top250?start={}'.format(i) for i in range(0, 226, 25)]
    for url in urls:
        html = get_response(url)
        infos = get_nodes(html)
        save_file(infos)

通过查看网页的get请求可以知道,参数是固定变化的。这样我们直接可以通过for循环来遍历网页请求参数。
在这里插入图片描述
到这里,我们的豆瓣电影就爬取完成了。来看一下结果吧!
在这里插入图片描述
完整代码

import requests
from lxml import etree
import csv

def get_response(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3534.4 Safari/537.36'}
    response = requests.get(url,headers=headers)
    response.encoding = 'UTF-8'
    return response.text

def get_nodes(html):
    text = etree.HTML(html)
    nodes = text.xpath('//li/div[@class="item"]')
    infos = []
    for node in nodes:
        try:
            key = {}
            key['movieName'] = str(node.xpath('.//span[@class="title"][1]/text()')).strip("[']")
            print(key['movieName'])
            firstInfo = node.xpath('.//div[@class="bd"]/p/text()')[0]
            secondInfo = node.xpath('.//div[@class="bd"]/p/text()')[1]
            key['director'] = str(firstInfo.split("主演:")[0]).strip().strip('导演:')
            key['actors'] = firstInfo.split("主演:")[1]
            key['time'] = secondInfo.split('/')[0]
            key['country'] = secondInfo.split('/')[1]
            infos.append(key)
        except:
            key['actors'] = None
    return infos
def save_file(infos):
    headers = ['电影名称','导演','主演','上映时间','国家']
    with open('DouBanMovieT250.csv','a+',encoding='UTF-8',newline='') as fp:
        writer = csv.writer(fp)
        writer.writerow(headers)
        for key in infos:
            writer.writerow([key['movieName'],key['director'],key['actors'],key['time'],key['country']])

if __name__  == '__main__':
    urls = ['https://movie.douban.com/top250?start={}'.format(i) for i in range(0, 226, 25)]
    for url in urls:
        html = get_response(url)
        infos = get_nodes(html)
        save_file(infos)

每天进步一点点,Keep Going!

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
随着科技的不断进步,我们的生活变得越来越离不开各种各样的程序。程序已成为我们日常生活和工作中不可或缺的一部分,它们可以帮助我们更高效地完成任务,节省时间和精力。今天,我要向大家介绍一款功能强大、用途广泛的程序,它具有万金油般的能力,可以为我们的生活带来极大的便利。 首先,这款程序具有非常强大的功能。它不仅可以帮助我们完成日常的文字处理、数据分析和报表制作等任务,还支持各种格式的文件读取和编辑。同时,它还具有多种工具和插件,可以扩展其功能,满足我们不同的需求。无论是工作还是生活,这款程序都能帮助我们轻松应对各种挑战。 其次,这款程序的界面设计非常友好。它的界面简洁明了,操作简单易懂,即使是不熟悉电脑操作的人也可以轻松上手。同时,它还支持自定义快捷键和界面主题,可以让我们根据自己的习惯和喜好进行个性化设置。 此外,这款程序还具有出色的稳定性和安全性。它采用了先进的技术和算法,可以保护我们的文件和数据安全。同时,它还支持自动备份和恢复功能,即使出现意外情况,也可以帮助我们快速恢复到之前的状态。 总之,这款程序就像生活中的万金油一样,具有广泛的应用场景和多种功能。它可以为我们的生活和工作带来便利和效率,帮助我们更好地应对各种挑战。如果您还在为处理各种任务而烦恼,不妨尝试一下这款程序,或许它会成为您的得力助手。
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值