IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 爬虫快速入门案例———豆瓣电影Top250 -> 正文阅读

[网络协议]爬虫快速入门案例———豆瓣电影Top250

爬虫:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是模拟浏览器发送网络请求,接收请求响应,自动提取网页,然后按照一定的规则,自动地抓取互联网信息的程序

?

1、导入需要模块

import requests               #用于请求网页
from lxml import etree        #用于xpath提取数据
import csv                    #用于储存为csv格式文件数据

?2、请求头设置:

为了不被反爬虫,认为是机器人在发送请求,这里需要设置请求头信息

右击网页——检查(进入开发人员工具)——网络——标头

?

?这里需要用到User-Agent(用户代理,网站可以通判断来给不同的操作系统、不同的浏览器发送不同的页面):Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53

和Referer(记录你在访问一个目标网站时,在访问前你的原网站的地址,这里为了方便,设置为每个网页网址)

#请求头
header = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53',
    'Referer': ''
}

header['Referer'] = url

3、分析网址

第一页:

?

?第二页:

?

?这里可以看到每一页共25条电影信息,共10页,网址规律start=0,25,50...。所以我们可以这样遍历每一页网址

for n in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(n) + '&filter='

4、分析排行网页源代码

?

右击网页——检查,进入开发者工具。点击第一个工具(查找元素工具),点击网页中第一个电影。这里可以看到电影的详细信息在<a href="https://movie.douban.com/subject/1292052/">中,我们要提取这里的网址。

这里采用xpath,这里就不详细讲解xpath,右击这个标签——复制——复制xpath

//*[@id="content"]/div/div[1]/ol/li[1]/div/div[1]/a

这里每个电影都在一个li标签下面,而且我们要得到的是a标签中的href属性值,所以xpath改为

//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href

?附上代码

def search(url):
    #爬取电影链接
    header['Referer'] = url                                                   #设置referer
    html = requests.get(url, headers=header)                                  #请求网页
    text = html.text                                                          #获取网页内容
    xp = etree.HTML(text)                                                     #用xpath解析网页
    ul = xp.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')   #获取电影链接
    return ul                                                                 #返回电影链接

5、分析电影详细网页

?

?跟上一步一样的方式,打开开发者工具,通过查找元素工具,这里我们可以得到电影名字,复制xpath://*[@id="content"]/h1/span[1]

电影名字在<span>[1]标签下的文本内容“肖申克的救赎 The Shawshank Redemption”,所以xpath改为://*[@id="content"]/h1/span[1]/text()

同样的道理可得到电影的评分、导演、主演等信息。

?附上代码

def crawl(url):
    #爬取电影信息
    header['Referer'] = url                                                        #设置referer
    html = requests.get(url, headers=header)                                       #请求网页
    text = html.text                                                               #获取网页内容
    xp = etree.HTML(text)                                                          #用xpath解析网页
    item['name'] = xp.xpath('//*[@id="content"]/h1/span[1]/text()')                #获取电影名称
    item['score'] = xp.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()') #获取电影评分
    item['actor'] = xp.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')           #获取电影演员
    item['director'] = xp.xpath('//*[@id="info"]/span[2]/span[2]/a/text()')        #获取电影导演

?6、储存数据

这里使用csv格式来储存

f = open('douban.csv', 'w', encoding='utf-8', newline='')              #打开csv文件
writer = csv.writer(f)                                                 #创建csv写入器
writer.writerow(['name', 'score', 'director', 'actor'])                #写入表头

writer.writerow([item['name'], item['score'], item['director'], item['actor']])  #写入数据
f.close()                                                              #关闭文件

7、附上整体代码

import requests               #用于请求网页
from lxml import etree        #用于xpath提取数据
import csv                    #用于储存为csv格式文件数据


#请求头
header = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53',
    'Referer': ''
}

# 定义一个字典,用于储存爬取的数据
item = {
    'name': '',
    'score': '',
    'director': '',
    'actor': '',
}


def search(url):
    #爬取电影链接
    header['Referer'] = url                                                   #设置referer
    html = requests.get(url, headers=header)                                  #请求网页
    text = html.text                                                          #获取网页内容
    xp = etree.HTML(text)                                                     #用xpath解析网页
    ul = xp.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')   #获取电影链接
    return ul                                                                 #返回电影链接

def crawl(url):
    #爬取电影信息
    header['Referer'] = url                                                        #设置referer
    html = requests.get(url, headers=header)                                       #请求网页
    text = html.text                                                               #获取网页内容
    xp = etree.HTML(text)                                                          #用xpath解析网页
    item['name'] = xp.xpath('//*[@id="content"]/h1/span[1]/text()')                #获取电影名称
    item['score'] = xp.xpath('//*[@id="interest_sectl"]/div/div[2]/strong/text()') #获取电影评分
    item['actor'] = xp.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')           #获取电影演员
    item['director'] = xp.xpath('//*[@id="info"]/span[2]/span[2]/a/text()')        #获取电影导演



def main():
    print("豆瓣电影Top250")
    print('爬虫开始')
    print("==========================")
    f = open('douban.csv', 'w', encoding='utf-8', newline='')              #打开csv文件
    writer = csv.writer(f)                                                 #创建csv写入器
    writer.writerow(['name', 'score', 'director', 'actor'])                #写入表头
    for n in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(n) + '&filter='
        urls = search(url)
        for url in urls:
            crawl(url)
            print(item)
            writer.writerow([item['name'], item['score'], item['director'], item['actor']])  #写入数据

    print("爬取完成")
    f.close()                                                                #关闭文件


if __name__ == "__main__":
    main()

运行结果:

??用Excel打开:

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:56:53  更:2021-11-19 17:58:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 20:56:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码