python爬虫爬取网站

流程:

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:   #将图片名变为namef.write(resp.content)       #将图片存入该目录

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

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

相关文章

EasyExcel使用,实体导入导出

简介 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是在内存中…

深入浅出AI落地应用分析:AI个人助手Monica

前言:铺天盖地的大模型以及所谓的应用到目前为止实际还是很少有像Monica这样贴合个人工作习惯的产品落地,比如像Chatgpt等这样的产品,绝大多数人不会专门买🪜翻墙出去用,而且大多数场景下素人或小白都不知道该怎么用,但是Monica这款产品就很好的以浏览器的插件的形式始终…

PyTorch][chapter 12][李宏毅深度学习][Semi-supervised Linear Methods-1]

这里面介绍半监督学习里面一些常用的方案&#xff1a; K-means ,HAC, PCA 等 目录&#xff1a; K-means HAC PCA 一 K-means 【预置条件】 N 个样本分成k 个 簇 step1: 初始化簇中心点 (随机从X中抽取k个样本点作为&#xff09; Repeat: For all in X: 根据其到 &…

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] }

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] } ubuntu20 win10 edge浏览器访问 服务器部署 页面打开后想使用chatgpt报错了 rootcoal-pasi1cmp:/www/wwwroot/ChatGPT-Next-Web# PORT3000 yarn start yarn run v1.22.19 warning package.json:…

LeetCode160. 相交链表

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第23套

少儿编程 蓝桥杯青少组科技素养题真题及解析第23套 1、英国计算机科学家艾伦图灵于 1950 年提出了著名的“图灵测试”,用于判断计算机是否具有智能。“图灵测试”是通过()的方法进行判断的 A、让两台计算机对话 B、让人类与计算机对话 C、给计算机出题 D、让计算机分辨图…

【轮式平衡机器人】——TMS320F28069片内外设之ADC

一、ADC概述 这一部分不是我们的重点&#xff0c;原理分类啥的这里简要说明&#xff01; 步骤&#xff1a;采样、保持、量化、编码 将采样电平&#xff08;模拟值&#xff09;转换为数字值的方法&#xff1a;直接比较型&#xff08;并行ADC、逐次逼近型ADC&#xff09;&…

2024.1.30 GNSS 学习笔记

站星双差Kalman滤波伪距差分定位流程 1. RTK定位技术&#xff08;实时载波相位差分技术&#xff09;原理-站间单差浮点解 1.RTK技术其实就是在RTD技术的基础上增加载波观测值的使用。由于伪距的噪声在分米量级&#xff0c;即使我们通过站间单差消除了绝大部分的误差影响&…

【React】前端项目引入阿里图标

【React】前端项目引入阿里图标 方式11、登录自己的iconfont-阿里巴巴矢量图标库&#xff0c;把需要的图标加入到自己的项目中去&#xff1b;2、加入并进入到项目中去选择Font class 并下载到本地3、得到的文件夹如下4. 把红框中的部分粘贴到自己的项目中&#xff08;public 文…

爬虫入门到精通_基础篇4(BeautifulSoup库_解析库,基本使用,标签选择器,标准选择器,CSS选择器)

1 Beautiful说明 BeautifulSoup库是灵活又方便的网页解析库&#xff0c;处理高效&#xff0c;支持多种解析器。利用它不用编写正则表达式即可方便地实线网页信息的提取。 安装 pip3 install beautifulsoup4解析库 解析器使用方法优势劣势Python标准库BeautifulSoup(markup,…

Web3.0初探

Web3.0初探 一、互联网发展史二、什么是Web3.0&#xff1f;三、现在的发展方向&#xff08;衍生出来的产品&#xff09;&#xff1a;四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面&#xff0c;介绍了 Redis 的 5 大基本数据类型&#xff1a;String、List、Hash、Set、Sorted Set&#xff0c;它们可以满足绝大多数的数据存储需求&#xff0c;但是在面对海里数据统计时&#xff0c;它们的内存开销很大。所以对于一些特殊的场景&#xff0c;它们是无…

全面解析msvcr100.dll丢失的解决方法,关于msvcr100.dll文件丢失是如何显示的

msvcr100.dll文件的丢失是一个常见的问题&#xff0c;它会导致一些应用程序无法正常运行或出现错误。为了解决这个问题&#xff0c;我们可以采取多种方法。下面将介绍几种常用的msvcr100.dll丢失的解决方法&#xff0c;通过采用合适的方法&#xff0c;我们可以轻松解决该问题&a…

C#,入门教程(36)——尝试(try)捕捉(catch)不同异常(Exception)的点滴知识与源代码

上一篇&#xff1a; C#&#xff0c;入门教程(35)——哈希表&#xff08;Hashtable&#xff09;的基础知识与用法https://blog.csdn.net/beijinghorn/article/details/124236243 1、try catch 错误机制 Try-catch 语句包含一个后接一个或多个 catch 子句的 try 块&#xff0c;这…

Python爬虫:XPath基本语法

XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集&#xff0c;类似于文件系统中的路径表达式。 不啰嗦&#xff0c;讲究使用&#xff0c;直接上案例。 导入 pip3 install lxmlfrom lxml import etr…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

指针深入了解7

1.qsort的模拟实现&#xff08;冒泡排序的原型制作&#xff09; 1.排序整型 int cmp_int(const void* p1, const void* p2) {return *((int*)p1) - *((int*)p2); } void swap(char* p1, char* p2)//完成交换 {int tmp *p1;*p1 *p2;*p2 tmp;} void bubble_sort(void* base,…

Django框架——第一个Django程序

大家好&#xff0c;在很久之前&#xff0c;我写了一系列关于Flask框架的文章&#xff0c;得到了不错的反馈&#xff0c;这次我打算写一系列关于Django框架的文章&#xff0c;希望大家多多支持&#xff0c;多给一些写作意见。 Django Django是用Python语言编写的开源web应用框…

matlab自定义函数实现图像小波变换

matlab中提供了小波变换函数lwt和ilwt&#xff0c;可以方便地实现提升小波变换。 我们按照小波变换的定义&#xff0c;粗糙地实现一个针对图像的小波变换&#xff0c;如下&#xff1a; % 使用方法&#xff1a; img imread(lena256.bmp); % 假设lena.png是灰度图像 subplot(2…

上门服务系统|如何搭建一款高质量的上门服务软件

预约上门系统源码开发是一项复杂而有挑战性的任务&#xff0c;但也是实现智能化预约服务的关键一步。通过自主开发预约上门系统的源码&#xff0c;企业可以完全定制系统的功能、界面和安全性&#xff0c;从而为用户提供更高效、便捷、个性化的预约体验。本文将带你深入了解预约…