爬虫学习2:爬虫爬取网页的信息与图片的方法

news2024/11/15 7:56:25

爬虫爬取网页的信息与图片的方法

  • 爬取人物信息

import requests

head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
# 这是get请求带参数的模式
def get_param():
    # 1、url
    url = "https://www.sogou.com/web?"
    # 2、发送请求 get带参数使用params参数
    response = requests.get(url, headers=head, params={"query": "刘亦菲"})
    # 3、获取想要的数据
    with open("./dilireba.html", "w", encoding="utf8") as fp:
        fp.write(response.text)
        print(type(response.text))
    pass
get_param()

在这里插入图片描述

  • 爬取动态变换的数据(如:翻译)

import requests
def post_data():
    # 1、url
    url = 'https://fanyi.baidu.com/sug'

    # 2、发送请求
    response = requests.post(url, headers=head, data={"kw": "dog"})

    # 获取想要的数据
    print(response.json())
post_data()

在这里插入图片描述

  • 爬取具体位置的数据的方法

import requests
from lxml import etree
if __name__ == '__main__':
    tree = etree.parse("./test.html")#读取文件
    # xpath返回的都是列表
    # / 标识一个层级
    print(tree.xpath("/html/body/div/p"))#找到想要数据的位置
    print(tree.xpath("/html/head/title"))
    # 定位百里守约  索引定位 从1开始
    print(tree.xpath("/html/body/div[1]/p"))#读取第一个div的p
    print(tree.xpath("/html/body/div/p[1]"))#读取body下面所有div下的第一个p
    #
    print(tree.xpath("/html/body/div[2]/a[2]"))
    print(tree.xpath("/html/body/div[3]/ul/li[3]/a"))
    #
    # # // 标识多个层级 属性定位 attr = class id
    # 定位李清照
    print(tree.xpath("//div[@class='song']/p[1]"))
    #查看class或id 对应的信息是不是独一无二的,如是采用div[@class='song']这种形式,如不是查看其上一级是不是独一无二的。
    print(tree.xpath("//div[@class='song']/a[@class='du']"))

    # # 取所有的li标签
    print(tree.xpath("//div[@class='tang']/ul/li"))
    # # 取li标签内的所有a标签
    for li in tree.xpath("//div[@class='tang']/ul/li"):
        try:#数据正确
            print("".join(li.xpath("./a/text()")))#将列表形式变成字符串形式
        except Exception as e:#数据失败,执行下一个,不会影响其他数据执行
            pass
    #
    # # 取标签下的直系文本内容
    print(tree.xpath("/html/body/div[1]/p/text()"))
    # 取标签下的所有文本
    print(tree.xpath("/html/body/div[2]//text()"))
    # 取标签内的属性值 @attr_name
    print(tree.xpath("//div[@class='song']/img/@src"))

在这里插入图片描述
在这里插入图片描述

test.html文件
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<title>测试bs4</title>
	</head>
	<body>
		<div>
			<p>百里守约</p>
		</div>
		<div class="song">
			你好
			<p>李清照</p>
			<p>王安石</p>
			<p>苏轼</p>
			<p>柳宗元</p>
			<a href="http://www.song.com/" title="赵匡胤" target="_self">
				<span>this is span</span>
			宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
			<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
			<img src="http://www.baidu.com/meinv.jpg" alt="" />
		</div>
		<div class="tang">
			<ul>
				清明时节雨纷纷,路上行人欲断魂
				<li>
					<a href="http://www.baidu.com" title="qing">
						清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村
					</a>
				</li>
				<li>
					<a href="http://www.163.com" title="qin">
						秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山
					</a>
				</li>
				<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
				<li><a href="http://www.sina.com" class="du">杜甫</a></li>
				<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
				<li><b>杜小月</b></li>
				<li><i>度蜜月</i></li>
				<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
			</ul>
		</div>
	</body>
</html>
  • 爬取网页(豆瓣TOP250的数据)

# pip install fake_useragent
import time

import requests
import fake_useragent
from lxml import etree
import re

if __name__ == '__main__':
    # UA伪装
    head = {
        # "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        "User-Agent": fake_useragent.UserAgent().random
    }

    # 打开一个文件写入数据
    fp = open("./doubanFilm.txt", "w", encoding="utf8")

    # 1、url
    # url = "https://movie.douban.com/top250"
    # url2 = "https://movie.douban.com/top250?start=25&filter="
    # url3 = "https://movie.douban.com/top250?start=50&filter="
    for i in range(0, 250, 25):#所有网页地址
        url = f"https://movie.douban.com/top250?start={i}&filter="
        time.sleep(5)
        # 2、发送请求
        response = requests.get(url, headers=head)
        # 3、获取想要的数据
        res_text = response.text
        # 4、数据解析
        tree = etree.HTML(res_text)
        # 定位所有的li标签
        li_list = tree.xpath("//ol[@class='grid_view']/li")  # 所有的li标签,包含信息
        for li in li_list:
            film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))  # 改成字符串形式
            director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
            score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
            quote = "".join(li.xpath(".//span[@class='inq']/text()"))
            # director_actor_y_country_type需要修改
            new_str = director_actor_y_country_type.strip()  # 去除空格
            y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)  # 正则表达式方式
            country = new_str.rsplit("/")[-2].strip()
            types = new_str.rsplit("/")[-1].strip()
            director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(1)

            try:
                actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
            except Exception as e:
                actor = "no"

            fp.write(
                film_name + "#" + y + "#" + country + "#" + types + "#" + director + "#" +
                actor + "#" + score + "#" + quote + "\n")  # 连接信息,连接符最好采用不常见的符号防止误读取
            print(film_name, y, country, types, director, actor, score, quote)

    fp.close()

在这里插入图片描述

  • 爬取图片

import os.path
import fake_useragent
import requests
from lxml import etree
# UA伪装
head = {
    "User-Agent": fake_useragent.UserAgent().random#自动伪装
}
pic_name = 0
def request_pic(url):
    # 2、发送请求
    response = requests.get(url, headers=head)
    # 3、获取想要的数据
    res_text = response.text
    # 4、数据解析
    tree = etree.HTML(res_text)
    li_list = tree.xpath("//div[@class='slist']/ul/li")#获取所有的照片信息
    for li in li_list:
        # 1、获取照片的url
        img_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))#img/@src,代表img的src属性
        # 2、发送请求
        img_response = requests.get(img_url, headers=head)
        # 3、获取想要的数据
        img_content = img_response.content
        global pic_name
        with open(f"./picLib/{pic_name}.jpg", "wb") as fp:#命名照片名称,并写下
            fp.write(img_content)
        pic_name += 1
if __name__ == '__main__':
    if not os.path.exists("./picLib"):#若没有一个此文件夹,建立一个文件夹存放照片
        os.mkdir("./picLib")
    # 1、url
    url = "https://pic.netbian.com/4kdongman/"
    request_pic(url)
    for i in range(2,10):#之后照片的url
        next_url = f"https://pic.netbian.com/4kdongman/index_{i}.html"
        request_pic(next_url)
    pass

在这里插入图片描述

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

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

相关文章

boost::asio网络编程

目录 基础操作端点的生成创建socket服务端创建acceptor用于监听传入的连接请求 并 接受连接服务器绑定端口客户端通过ip连接服务端 connect客户端通过域名连接服务端服务器监听 接受连接读写buffer同步的读写实现一个同步读写的服务器与客户端应答 异步读写函数异步写异步读官方…

冒泡排序(数组作为函数参数)

什么是冒泡排序&#xff1f; 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;…

CVE-2020-7248 OpenWRT libubox标记二进制数据序列化漏洞(更新中)

提要 该文档会一直处于更新当中&#xff0c;当状态为完毕后&#xff0c;才是更新完成。由于网络上关于该漏洞原理的分析文档和资源实在是太少&#xff0c;而本人关于该方向也才是刚入门&#xff0c;能力有限&#xff0c;所以复现需要的时间较长&#xff0c;需要补充和学习的东西…

中国的AI技术水平,是否已经到了能够帮助创作者实现内容的程度?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 是的&#xff0c;早就实现了&#xff0c;我从上年开始用AI辅助写小说&#xff0c;已经挣了2万多。 这是我在番茄那开的小号&#xff0…

Redis的集群模式

1. Redis三种集群模式 Redis 提供的三种集群模式各有其特点和适用场景&#xff0c;以下是对这三种模式的简要概述&#xff1a; 主从模式&#xff08;Master-Slave Replication&#xff09;&#xff1a; 在这种模式下&#xff0c;数据在主节点&#xff08;Master&#xff09;上…

服务器部署环境(docker安装Mysql + Redis + MongoDB)

1. 安装Docker 1、选择要安装的平台 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本官网地址 2. 卸载已安装的Docker, 使用Root权限登录 Centos。确保yum包更新到最新。 sudo yum update如果操作系统没有安装过Docker , 就不需要…

自动化测试之python操作Oracle遇到的问题:Oracle-Error-Message: DPI-1047

自动化测试需要连接数据库&#xff0c;进行一些增删改查的操作&#xff0c;那么针对python语言&#xff0c;如何才能够通过程序完成连接数据库并且进行操作呢&#xff1f;可以通过cx_oracle这个模块来实现。 一、问题描述&#xff1a; 下面是我在实践的过程中遇到的问题&#…

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…

Python-numpy基础--------2

1.full()创建函数 目录 1.full()创建函数 2.创建单位矩阵 3.linspace创建 4.logspace 创建 5.二维数组的索引和切片&#xff1a; 1.索引直接获取 在NumPy中&#xff0c;full() 函数用于创建一个给定形状、类型的新数组&#xff0c;并用指定的值填充这个数组。这个函数非…

p24 p25作业讲解(2)

#include<stdio.h> #include<stdlib.h> int count_bit_one(int n) { int count0;while(n){if(n%21){count;}nn/2;}return count;} int main(){int a0;scanf("%d",&a);//写一个函数求a的二进制(补码)表示中有几个1int countcount_bit_one(a);printf(&…

C盘上的软件怎么移动到D盘?C盘满了,教你轻松转移软件到D盘

在日常使用电脑的过程中&#xff0c;我们经常会遇到C盘空间不足的情况。为了释放C盘的空间&#xff0c;或者为了更好地管理我们的软件和文件&#xff0c;我们可能需要将安装在C盘的软件移动到D盘。那么&#xff0c;C盘上的软件怎么移动到D盘呢&#xff1f;本文将介绍两种常用的…

Ubuntu-文件管理器中鼠标右键添加文本文件

文件管理器中鼠标右键添加文本文件 一、概述二、步骤 一、概述 Ubuntu在文管右键发现没有创建文本文件的菜单&#xff0c; 期望如下所示&#xff0c;这样的操作非常简单 二、步骤 找到模板文件夹 在模板文件夹&#xff0c;创建自己想要的文件就好啦 这个也是支持放文件夹去…

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…

听说宇哥突然大幅删减了新36讲?25张宇强化究竟行不行呀?

宇哥深夜划重点&#xff0c;大幅删减新36讲&#xff01; 宇哥最近舆论压力很大&#xff0c;很多人怕36讲暑假学不完了。 甚至一些人开始考虑&#xff0c;要不要转武忠祥&#xff1f; 张宇划的重点课&#xff0c;其实就是&#xff1a;概念要听&#xff0c;计算不用听。 因为强…

SQL Server 数据误删的恢复

在日常的数据库管理中&#xff0c;数据的误删操作是难以避免的。为了确保数据的安全性和完整性&#xff0c;我们必须采取一些措施来进行数据的备份和恢复。本文将详细介绍如何在 SQL Server 中进行数据的备份和恢复操作&#xff0c;特别是在发生数据误删的情况下。假设我们已经…

苹果微信数据恢复的教程?3个方法,一学就会!

各位家人朋友们&#xff01;你是否有遇到过微信数据误删或者是找不到的窘况呢&#xff1f;是不是时常会发现时间较为久远的微信聊天记录或者是文件已经过期无法打开呢&#xff1f;这些生活上的小烦恼大家都会有&#xff0c;但是大部分人都不知道该如何解决微信数据恢复问题。今…

大厂面试官问我:Mysql B+树索引中B最后一层是双向链表还是单向链表?为什么这么设计?【后端八股文十四:Mysql索引八股文合集】

本文为【Mysql索引八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏…

局部加全局视角遮挡人脸表情识别方法

一、摘要 实际场景中各种遮挡增加了表情识别难度。为此&#xff0c;提出一种滑块局部加权卷积注意力和全局注意力 池化的视觉 Transformer 结合的方法来解决遮挡问题。 利用主干网络提取表情特征图&#xff0c;将表情特征图裁剪成 多个区域块&#xff0c;利用局部 Patch 注意力…

Mem0 - 个人 AI 的内存层

文章目录 一、关于 Mem0核心功能&#x1f511;路线图 &#x1f5fa;️常见用例Mem0与RAG有何不同&#xff1f; 二、快速入门 &#x1f680;1、安装2、基本用法&#xff08;开源&#xff09;3、高级用法&#x1f527;4、大模型支持 三、MultiOn1、概览2、设置和配置4、将记忆添加…

【嵌入式开发之并发程序设计】守护进程的定义、特点、相关概念及创建

守护进程的定义 守护进程(Daemon Process)&#xff0c;又叫精灵进程、监控进程&#xff0c;是Linux三种进程类型之一&#xff0c;是 Linux 中的后台服务进程&#xff0c;是一个生存期较长的进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事…