【Python】01快速上手爬虫案例一

news2024/9/23 13:28:51

文章目录

  • 前言
  • 一、VSCode+Python环境搭建
  • 二、爬虫案例一
    • 1、爬取第一页数据
    • 2、爬取所有页数据
    • 3、格式化html数据
    • 4、导出excel文件


前言

实战是最好的老师,直接案例操作,快速上手。

案例一,爬取数据,最终效果图:

在这里插入图片描述


一、VSCode+Python环境搭建

开发环境:MacBook Pro + VSCode + Python。

打开最新版VSCode,安装Python开发环境,快捷键:cmd+shift+x。

在这里插入图片描述
选择Python解释器,快捷键:cmd+shift+p。输入:Python: Select Interpreter,选择解释器。
在这里插入图片描述
写“hello world”。
新建文件,输入print(‘hello world~’),另存为hello.py文件。
shift+enter 运行:
在这里插入图片描述

二、爬虫案例一

以爬取“豆瓣读书TOP250”的书籍为案例。

网址链接:https://book.douban.com/top250?start=0

1、爬取第一页数据

代码如下:

import requests
def askUrl(url):
    head = { 
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
    }
    html=""  
    r = requests.get(url, headers = head) 
    html = r.text 
    print(html)  
    return html

if __name__ == "__main__": 
    askUrl("https://book.douban.com/top250?start=0") 

head->User-Agent的值可以从这个地方获取:

在这里插入图片描述
如果import requests报错,使用pip3 install requests安装。

运行之后,结果如下:

在这里插入图片描述

第一页25个,都以html的形式显示了出来,第25个为书籍《野草》。

2、爬取所有页数据

代码如下:


import requests
def askUrl(url):
    head = { 
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
    }
    r = requests.get(url, headers = head)
    html = r.text
    print(html)

def getData(baseurl):
    for i in range(0, 10):
        url = baseurl + str(i * 25)
        html = askUrl(url)

if __name__ == "__main__": 
    baseurl = "https://book.douban.com/top250?start="
    getData(baseurl)

运行之后,结果如下:

在这里插入图片描述

最后一页,最后一个,为书籍《哈姆莱特》。

3、格式化html数据

上面1和2,只是输出了html源码,现在按自己需要的几个字段进行格式化。

分别取这4个字段:封面图、书籍名称、作者(出版社、价格等)、引用。

在这里插入图片描述

这里使用lxml库,解析html。

# 导入lxml库子模块etree
from lxml import etree 

格式化代码如下:

import requests
from lxml import etree 

def askUrl(url):
    head = { 
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
    }
    html=""  
    r = requests.get(url, headers = head) 
    html = r.text 
    parse = etree.HTML(html)  
    # 数据
    # all_tr = parse.xpath('/html[@class="ua-mac ua-webkit book-new-nav"]/body/div[@id="wrapper"]/div[@id="content"]/div[@class="grid-16-8 clearfix"]/div[@class="article"]/div[@class="indent"]/table')
    all_tr = parse.xpath('//*[@id="content"]/div/div[1]/div/table')

    for tr in all_tr:
        tr_data = {
        'vover': ''.join(tr.xpath('./tr/td[1]/a/img/@src')).strip(), # 封面图
        'name': ''.join(tr.xpath('./tr/td[2]/div[@class="pl2"]/a/text()')).strip(), # 书名
        'author': ''.join(tr.xpath('./tr/td[2]/p[1]/text()')).strip(), # 作者
        'quote': ''.join(tr.xpath('./tr/td[2]/p[2]/span/text()')).strip() # 引用
        }
        print(tr_data)

if __name__ == "__main__": 
    askUrl("https://book.douban.com/top250?start=0") 

如果报错:

urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. 

解决方法:

pip3 install urllib3==1.26.15

结果如下:

在这里插入图片描述

数据,已经非常清晰了。

PS:使用parse.xpath,最重要的是获取到准确的xpath值。

两个方法:

方法一:Google Chrome浏览器插件:xpath helper。

效果如下:

弹出插件面板:cmd+shift+x。

选中:shift。

在这里插入图片描述
取到的值为:

# 原始值
/html[@class='ua-mac ua-webkit book-new-nav']/body/div[@id='wrapper']/div[@id='content']/div[@class='grid-16-8 clearfix']/div[@class='article']/div[@class='indent']/table[1]/tbody/tr[@class='item']

# 优化后的值(使用此值,去掉了tbody和[1])
/html[@class='ua-mac ua-webkit book-new-nav']/body/div[@id='wrapper']/div[@id='content']/div[@class='grid-16-8 clearfix']/div[@class='article']/div[@class='indent']/table

方法二:Google Chrome浏览器,查看源代码。

在这里插入图片描述

取到的值为:

# 原始值
//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr

# 优化后的值(使用此值,去掉了tbody和[1])
//*[@id="content"]/div/div[1]/div/table

每一个字段对应的xpath值,也是这么获取。

4、导出excel文件

生成csv格式文件。

导入csv库:

import csv

导出cvs文件(第一页25条),代码如下:

import requests
from lxml import etree 
import csv

def askUrl(url):
    head = { 
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
    }
    html=""  
    r = requests.get(url, headers = head) 
    html = r.text 
    parse = etree.HTML(html)  
    # 数据
    all_tr = parse.xpath('//*[@id="content"]/div/div[1]/div/table')

    # 创建book.csv文件
    with open('book.csv', 'a', encoding='utf_8_sig', newline='') as fp:  
        header = ['封面','名称', '作者', '引用']  
        writer = csv.writer(fp)  
        writer.writerow(header)

    for tr in all_tr:
        tr_data = {
        'vover': ''.join(tr.xpath('./tr/td[1]/a/img/@src')).strip(), # 封面图
        'name': ''.join(tr.xpath('./tr/td[2]/div[@class="pl2"]/a/text()')).strip(), # 书名
        'author': ''.join(tr.xpath('./tr/td[2]/p[1]/text()')).strip(), # 作者
        'quote': ''.join(tr.xpath('./tr/td[2]/p[2]/span/text()')).strip() # 引用
        }
        # print(tr_data)
        # 写入数据行
        with open('book.csv', 'a', encoding='utf_8_sig', newline='') as fp:  
            fieldnames = ['vover','name', 'author', 'quote']  
            writer = csv.DictWriter(fp, fieldnames)  
            writer.writerow(tr_data)

if __name__ == "__main__": 
    askUrl("https://book.douban.com/top250?start=0") 

导出的book.csv文件(第一页),如下:

在这里插入图片描述

导出cvs文件(所有的250条),代码如下:

import requests
from lxml import etree 
import csv

def askUrl(url):
    head = { 
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
    }
    r = requests.get(url, headers = head)
    html = r.text
    # print(html)

    parse = etree.HTML(html)
    all_tr = parse.xpath('//*[@id="content"]/div/div[1]/div/table')

    for tr in all_tr:
        tr_data = {
            'vover': ''.join(tr.xpath('./tr/td[1]/a/img/@src')).strip(), # 封面图
            'name': ''.join(tr.xpath('./tr/td[2]/div[@class="pl2"]/a/text()')).strip(), # 书名
            'author': ''.join(tr.xpath('./tr/td[2]/p[1]/text()')).strip(), # 作者
            'quote': ''.join(tr.xpath('./tr/td[2]/p[2]/span/text()')).strip() # 引用
            }
            # print(tr_data)
        # 写入数据行
        with open('bookall.csv', 'a', encoding='utf_8_sig', newline='') as fp:  
                fieldnames = ['vover','name', 'author', 'quote']  
                writer = csv.DictWriter(fp, fieldnames)  
                writer.writerow(tr_data)

def getData(baseurl):
    # 创建book.csv文件
    with open('bookall.csv', 'a', encoding='utf_8_sig', newline='') as fp:  
        header = ['封面','名称', '作者', '引用']  
        writer = csv.writer(fp)  
        writer.writerow(header)
    # 插入25页的数据
    for i in range(0, 10):
        url = baseurl + str(i * 25)
        html = askUrl(url)


if __name__ == "__main__": 
    baseurl = "https://book.douban.com/top250?start="
    getData(baseurl)

导出的book.csv文件(所有页250条数据),如下:

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络通信课程总结(小飞有点东西)

27集 局域网通信:用MAC地址 跨局域网通信:用IP地址(MAC地址的作用只是让我们找到网关) 又因为arp技术,可以通过MAC地址找到IP地址,所以我们可以通过IP地址定位到全世界任意一台计算机。 28集 在数据链路…

基于Java SSM框架实现在线教育资源管理系统项目【项目源码+论文说明】

基于java的SSM框架在线教育资源管理系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线教育资源管理系统,主要的模块包括管理员;个人中心、学生管理、教师管…

【Vue2 + ElementUI】分页el-pagination 封装成公用组件

效果图 实现 &#xff08;1&#xff09;公共组件 <template><nav class"pagination-nav"><el-pagination class"page-area" size-change"handleSizeChange" current-change"handleCurrentChange":current-page"c…

【项目日记(四)】第一层: 线程缓存的具体实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

语义分割 | 基于 VGG16 预训练网络和 Segnet 架构实现迁移学习

Hi&#xff0c;大家好&#xff0c;我是源于花海。本文主要使用数据标注工具 Labelme 对猫&#xff08;cat&#xff09;和狗&#xff08;dog&#xff09;这两种训练样本进行标注&#xff0c;使用预训练模型 VGG16 作为卷积基&#xff0c;并在其之上添加了全连接层。基于标注样本…

客户大批量保密文件销毁,数据销毁新方案及实践 文件销毁 硬盘销毁 数据销毁 物料销毁

2023年春节前夕&#xff0c;青岛客户经理接到一个电话&#xff0c;韩国驻华机构想请我们做文件销毁&#xff0c;要求在2天内销毁800多箱纸文件。800多箱需要在短短两天内完成销毁&#xff0c;这一数字创下了淼一文件数据销毁自2009年以来的历史记录。单从业绩和营销角度看&…

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…

使用 docker 搭建搭建私有仓库 ~ Registry

博客原文 文章目录 前言安装 docker让apt可以支持HTTPS将官方Docker库的GPG公钥添加到系统中将Docker库添加到APT里更新包列表为了确保修改生效&#xff0c;让新的安装从Docker库里获取&#xff0c;而不是从Ubuntu自己的库里获取&#xff0c;执行&#xff1a;安装 docker-ce配置…

《WebKit 技术内幕》学习之八(2):硬件加速机制

2 Chromium的硬件加速机制 2.1 GraphicsLayer的支持 GraphicsLayer对象是对一个渲染后端存储中某一层的抽象&#xff0c;同众多其他WebKit所定义的抽象类一样&#xff0c;在WebKit移植中&#xff0c;它还需要具体的实现类来支持该类所要提供的功能。为了完成这一功能&#x…

nodejs学习计划--(六)包管理工具

包管理工具 1. 介绍 包是什么 『包』英文单词是 package &#xff0c;代表了一组特定功能的源码集合包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可以快…

用graalvm将maven项目打包成可执行文件

概述&#xff1a;配置graalvm或者用graalvm打包springboot项目请看下面文章&#xff1a; Springboot3新特性&#xff1a;开发第一个 GraalVM 本机应用程序(完整教程)-CSDN博客 废话不多说&#xff0c;咱们开始用GraalVM打包maven项目。 第一步&#xff1a;引入依赖和插件 p…

C++ 设计模式之责任链模式

【声明】本题目来源于卡码网&#xff08;卡码网KamaCoder&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是责任链模式&#xff08;第21种设计模式&#xff09; 责任链模式是⼀种行为型设计模式&am…

bean的一生

你曾读spring源码 “不知所云”、“绞尽脑汁”、“不知所措”嘛&#x1f923;&#x1f923;&#x1f923; 那这篇文章可能会对你有所帮助&#xff0c;小编尝试用简单、易懂的例子来模拟spring经典代码&#x1f449;Spring Bean生命周期及扩展点&#xff0c; 让你能够****轻松…

Word中插入公式并引用

1、如何插入公式 在word中,键入快捷键 “alt” + “=”,即可快速插入一个公式,并立即编辑。 2、利用表格框住公式 新建一个 1 行 3 列的表格,总宽度为页面宽度,第一个单元格和最后一个单元格都保持在 2.25cm,中间尽可能长。我设置的这个数值比较合理。 记住,要把表格…

mask transformer相关论文阅读

前面讲了mask-transformer对医学图像分割任务是非常适用的。本文就是总结一些近期看过的mask-transformer方面的论文。 因为不知道mask transformer是什么就看了一些论文。后来得出结论&#xff0c;应该就是生成mask的transformer就是mask transformer。 相关论文&#xff1a; …

数据结构OJ题——二叉树前序、中序遍历非递归实现(Java版)

二叉树前序、中序遍历非递归实现 前序非递归遍历实现中序非递归遍历实现 前序非递归遍历实现 题目&#xff1a; 二叉树前序遍历非递归实现 总体思路&#xff1a;用非递归的方式模拟递归遍历。 以下图为例&#xff1a; 图示详解&#xff1a; 代码实现&#xff1a; /*** Defi…

【4.LCD显示】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) 文章目录 系列文章目录LCD显示一、官方例程讲解二、main.c --> LcdProcess总结 LCD显示 因为官方给了我们LCD的例程,所以很easy,我们照着套就行 LcdProcess() 一、官方例程讲解 二、main.c --> LcdProcess…

143基于matlab的2D平面桁架有限元分析

基于matlab的2D平面桁架有限元分析&#xff0c;可以改变材料参数&#xff0c;输出平面结构外形&#xff0c;各桁架应力&#xff0c;位移及作用力。可查看节点力&#xff0c;程序已调通&#xff0c;可直接运行。 143 matlab 平面桁架 有限元分析 桁架应力 (xiaohongshu.com)

ubuntu下docker卸载和重新安装

卸载&#xff1a;步骤一&#xff1a;停止Docker服务 首先&#xff0c;我们需要停止正在运行的Docker服务。打开终端&#xff0c;执行以下命令&#xff1a; sudo systemctl stop docker 步骤二&#xff1a;删除Docker安装包 接下来&#xff0c;我们需要删除已经安装的Docker软件…

《WebKit 技术内幕》学习之六(3): CSS解释器和样式布局

3 WebKit布局 3.1 基础 当WebKit创建RenderObject对象之后&#xff0c;每个对象是不知道自己的位置、大小等信息的&#xff0c;WebKit根据框模型来计算它们的位置、大小等信息的过程称为布局计算&#xff08;或者称为排版&#xff09;。 图描述了这一过程中涉及的主要WebKit…