python爬虫爬取网站

news2024/11/15 5:41:07

流程:

1.指定url(获取网页的内容)

爬虫会向指定的URL发送HTTP请求,获取网页的HTML代码,然后解析HTML代码,提取出需要的信息,如文本、图片、链接等。爬虫请求URL的过程中,还可以设置请求头、请求参数、请求方法等,以便获取更精确的数据。通过爬虫请求URL,可以快速、自动地获取大量的数据,为后续的数据分析和处理提供基础。

2.发起请求(request)(向目标网站发送请求,获取网站上的数据)

通过发送请求,爬虫可以模拟浏览器的行为,访问网站上的各种资源,例如网页、图片、视频、音频等等。爬虫可以通过请求获取网站上的数据,然后对数据进行解析和处理,从而实现数据的抓取和提取。请求可以包含各种参数,例如请求的URL、请求的方法、请求的头部信息、请求的数据等等,这些参数可以根据需要进行设置,以便获取目标数据。

3.获取响应数据(页面源码)
4.存储数据

一、导入相关库(requests库)

安装:

pip install requests

导入:(requests:python的网络请求模块)

import requests

返回值:

response.status_code : 状态码
response.url: 请求url
response.headers: 头部信息
response.cookies: cookie信息
response.text: 字符串形式网页源码
response.content: 字节流形式网页源码

二、相关的参数(url,headers)

带参数的请求:

  • 百度搜索设置了反爬机制,如果判断请求方是爬虫而不是浏览器,则不返回结果
  • 百度如何判断是爬虫还是浏览器在请求?

通过User-Agent(请求者身份标识)

获取:进入想要爬取的网站中点击F12

点击network,按下Ctr+r或者F5刷新,拉到页面的最上方叫research的文件,打开headers,

这里我们只需要到两个简单的参数,本次案例只是做一个简单的爬虫教程,其他参数暂时不考虑

参数

作用

Request URL

发送请求的网站地址,也就是图片所在的网址

user-agent

用来模拟浏览器对网站进行访问,避免被网站监测出非法访问

做参数代码的准备

url = "https://pic.netbian.com/uploads/allimg/210317/001935-16159115757f04.jpg"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}

三、向网站发出请求

response = requests.get(url=url,headers=headers)
print(response.text) # 打印请求成功的网页源码,和在网页右键查看源代码的内容一样的

出现的网络源码可能会乱码

解决乱码:

  • 修改response的encoding为utf-8,然后再进行写入

  • 通过发送请求成功response,通过(apparent_encoding)获取该网页的编码格式,并对response解码

response.encoding=response.apparent_encoding

区别:
  • 第一行代码 `response.encoding=response.apparent_encoding` 是使用 `response` 对象的 `apparent_encoding` 属性来自动检测编码,并将编码设置为检测到的编码。`apparent_encoding` 属性是根据 HTTP 头部、HTML 的 meta 标签等信息来猜测编码的,但并不一定准确。
  • 第二行代码 `response.encoding='utf-8'` 是手动将编码设置为 UTF-8。这种方式适用于已知响应的编码方式,或者在使用第一种方式检测编码失败时手动指定编码。
  • 第一种方式更加智能,但可能不够准确;第二种方式更加精确,但需要手动指定编码。

四、匹配(re库,正则表达式)

正则表达式:简单点说就是由用户制定一个规则,然后代码根据我们指定的所规则去指定内容里匹配出正确的内容

通过正则表达式把一个个图片的链接和名字给匹配出来,存放到一个列表中

import re
"""
. 表示除空格外任意字符(除\n外)
* 表示匹配字符零次或多次
? 表示匹配字符零次或一次
.*? 非贪婪匹配
"""
# src后面存放的是链接,alt后面是图片的名字
# 直接(.*?)也是可以可以直接获取到链接,但是会匹配到其他不是我们想要的图片
# 我们可以在前面图片信息看到链接都是/u····开头的,所以我们就设定限定条件(/u.*?)
#这样就能匹配到我们想要的
parr = re.compile('src="(/u.*?)".alt="(.*?)"')
image = re.findall(parr,response.text)
for content in image:
    print(content)

解析html文件:

•导入lxml模块中的html功能

•使用html.fromstring函数将网页文本解析成html内容

这里举爬取豆瓣电影排行榜并解析其电影图片和电影名的例子来更好地学习爬虫的相关步骤

网址:https://movie.douban.com/chart

要解析html文件,先安装lxml模块

命令:

pip install lxml
  • 导入lxml模块中的html功能
  • 使用html.fromstring函数将网页文本解析成html内容
  • esponse是爬虫获取的结果,也可以读本地存好的html文件
  • 观察html文件,找到想收集的数据在什么样的标签里
  • 例如要获取电影名字,通过观察,所有的电影名字都在<a class = "nbg">标签里

  • 使用xpath函数定位到电影名字所在的标签(注意路径以//开头,指定class名称前要加@符号)
  • 使用 /@属性名 获取标签内的某个属性值
  • 注意:得到的结果必定是列表,即使只有一个元素

打印列表结果

然后用相同的方式,对电影的评分和图片进行爬取

#导入网络请求库
import requests,lxml,os
from lxml import html   #用于解析html文件
url="https://movie.douban.com/chart"
headers={
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
content=html.fromstring(response.text)  #将HTTP响应的文本内容转换为HTML文档对象,以便进行后续的HTML解析和处理
text=str(content)
f=open("douban.html",'w',encoding='utf-8')  #打开html文件,以写入模式‘w’打开,指定编码格式为utf-8
f.write(response.text)  #将爬取到的内容写入文件中
f.close()
import os
names=content.xpath('//a[@class="nbg"]/@title')   #运用xpath函数解析html文件找到电影的名字存储到一个列表里面
print(names)
scores=content.xpath('//span[@class="rating_nums"]/text()')
print(scores)
pictures=content.xpath('//a[@class="nbg"]/img/@src') #这里存储的是图片的网址,并组成了一个列表
if not os.path.exists('pictures'):   #创建一个文件夹
    os.mkdir('pictures')
for i in pictures:  #便利每一张图片列表的元素
    resp=requests.get(url=i,headers=headers) #依次向每张图片发送get请求,获取响应信息
    name=i.split('/').pop()  #以‘/’来分割,取图片网址的提取出最后一个斜杠后面的部分来作为名字
    with open('pictures/'+name,"wb")as f:   #将图片名变为name
        f.write(resp.content)       #将图片存入该目录

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

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

相关文章

亿某通电子文档安全管理系统 UploadFileToCatalog SQL注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

用免费软件分流抢票Bypass辅助购买火车票的亲测可用方法

本文介绍基于分流抢票&#xff08;Bypass&#xff09;软件&#xff0c;协助购买预售、已开售或候补等各类状态的火车票的方法。 最近几天一直没有顾得上看过年回家的火车票&#xff0c;导致错过了回家车票的开售时间&#xff0c;所以当时就直接去12306的官方网站候补了&#xf…

基于3DGIS 的5G 基站规划

这个基于3DGIS 5G 基站规划的案例很不错&#xff0c;与大家分享一下。感觉是3DGIS中为数不多的实用案例。但还是没有特别多的突出三维的技术优势&#xff0c;因为这里面很多规划思想其实还是基于面的而不是基于体的&#xff01;好了不多说了&#xff0c;给大家分享这个案例&…

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…

【Java程序设计】【C00188】基于SSM的宠物猫狗商业管理系统(论文+PPT)

基于SSM的宠物猫狗商业管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物猫狗商业系统 本系统分为前台系统、后台管理员以及后台用户3个功能模块。 前台系统&#xff1a;当游客打开系统的网址后&#xff0c;…

容器化对数据库的性能有影响吗?

引言 容器化是一种将应用程序及其依赖项打包到一个独立、可移植的运行环境中的技术。容器化技术通过使用容器运行时引擎&#xff08;比如Docker/Containerd&#xff09;来创建、部署和管理容器。Kubernetes&#xff08;通常简称为 k8s&#xff09;是一个开源的容器编排和管理平…

作业2024/2/3

第二章 引用内联重载 一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句…

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上&#xff0c;OceanBase 沿着“一体化”产品战略思路&#xff0c;发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本&#xff0c;该版本的定位是支撑客户关键业务稳定长久运行&#xff0c;我们非常认真的打磨了这个版本&#…

MySQL事务原理-相关日志

文章目录 前言一、什么是事务&#xff1f;1.1 事务概念1.2 事务的四大特性1.3 事务的隔离级别 二、实现原理2.1 TODO2.2 TODO 前言 事务是由MySQL的引擎来实现的&#xff0c;通过show engines命令查看MySQL存储引擎类别&#xff0c;观察只有InnoDB存储引擎支持事务。 一、什么…

Transformer实战-系列教程3:Vision Transformer 源码解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、整体解读 在文本任务中大量使用了Transformer 架构&#xff0c;因为文本数据是一个序列非常好…

如何在FBX剔除Lit.shader依赖

1&#xff09;如何在FBX剔除Lit.shader依赖 2&#xff09;Unity出AAB包&#xff08;PlayAssetDelivery&#xff09;模式下加载资源过慢问题 3&#xff09;如何在URP中正确打出Shader变体 4&#xff09;XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送&#xff0c;精…

浅谈一下SpringBoot吧

什么是SpringBoot&#xff1f; Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架&#xff0c;旨在简化 Spring 应用的初始搭建和开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 约定大于&#xff08;优于&#…

二叉树可视化

二叉树可视化 运行演示代码和程序已上传二叉树知识平衡二叉树红黑树最优二叉搜索树哈夫曼树KD树B树和B树 参考 运行演示 学习二叉树总是脑补图像&#xff0c;实在是恶心&#xff0c;就想写一个能可视化的二叉树&#xff0c;结果没控制好&#xff0c;功能越想越多&#xff0c;先…

第2集《忏悔法门》

请大家打开讲义第五面&#xff0c; 这一科讲到甲二&#xff0c;正式说明忏悔的方法。「忏悔的方法」有三个主题&#xff0c;第一个是「思惟业果的道理」&#xff0c;这当中有「理论的思惟」&#xff0c;跟「事相的观察」。 理论的思惟是说&#xff1a;今天当我们造了一个业&a…

asp.net core通过读取配置文件来动态生成接口

如果希望接口是每次通过配置文件生成的&#xff0c;这样设计一些低代码的方式来获得接口。 系统目录结构&#xff1a; 启动配置代码&#xff1a; using Microsoft.AspNetCore.Hosting; using System.Configuration; using System.Data.Entity; using Swashbuckle.AspNetCore.…

线性代数:线性方程组

目录 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理

stack_queue:三个关键注意事项解析

一、stack与容器 template<class T, class Container> class stack { private:Container _con; };Container 为容器&#xff0c;在实例化创建对象时&#xff0c;我们可以传 vector<T> 或 list<T> 等作为栈的底层。 举例&#xff1a; int main() {stack<i…

自动化诊断测试之CANoe.DIVA入门

目录 0 前言 1 CANoe.DIVA基础 2 CANoe.DIVA TIPs 0 前言 写在前面&#xff1a;如对本文有任何疑问欢迎评论区讨论&#xff0c;希望和大家一起进步。同时HIL测试群欢迎大家加入如有需要也可私信我拉你。VT和DIVA都可以做UDS的自动化测试&#xff0c;但相对VT来说使用DIVA生成…

Python中的变量命名规则

Python 变量命名规则 1. 要具有描述性 2.变量名只能是&#xff1a;数字&#xff0c;字母组成&#xff0c;不可以是空格或特殊字符&#xff0c;如&#xff1a;(#&#xff1f;。&#xff0c;&#xffe5;$*~!&)等 3.不能是中文 4.不能以数字开头 5.保留字符是不能被使用…

从MySQL到TiDB:兼容性全解析

MySQL 在高并发和大数据量场景下&#xff0c;单个实例的扩展性有限。而 TiDB 作为一款分布式NewSQL数据库&#xff0c;设计之初就支持水平扩展&#xff08;Scale-Out&#xff09;&#xff0c;通过增加节点来线性提升处理能力和存储容量&#xff0c;能够很好地应对大规模数据和高…