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.hqwc.cn/news/441092.html

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

相关文章

现代C++之万能引用、完美转发、引用折叠FrancisFrancis

转载&#xff1a;现代C之万能引用、完美转发、引用折叠 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/99524127 后期参考(还未整合)&#xff1a;C 完美转发深度解析:从入门到精通_c完美转发-CSDN博客https://blog.csdn.net/qq_21438461/article/details/129938466 0.导语 …

产品经理的发展方向是什么?市场需求现状如何?未来有哪些趋势?作为产品经理应该如何准备?

目录 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 作为产品经理应该作何准备? 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 个人软件 &#xff1a;智能终端&#xff0c;轻量化应用&#xff0c;虚拟社交等企业软件&#xff1a…

2022年下半年部分团队的总结

写作&#xff0c;慢思考&#xff1a; 软件团队每天有繁忙的工作&#xff0c;有很多待办事项&#xff0c;会议&#xff0c;口头交流&#xff0c;线上的 bug 要处理&#xff0c;报表要生成和解释… … 一个月过去了&#xff0c;正想总结&#xff0c;下一个月&#xff0c;下一年又…

三维模型设计新纪元:3D开发工具HOOPS在机械加工行业的应用与优势

在当今快速发展的科技时代&#xff0c;机械加工行业正经历着巨大的变革&#xff0c;而HOOPS技术正是其中一项重要的创新。HOOPS技术不仅仅是一种用于处理和可视化计算机辅助设计&#xff08;CAD&#xff09;数据的工具&#xff0c;更是机械加工领域中提升效率、优化设计的利器。…

【计算机网络】【练习题及解答】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 题目共4问&#xff0c;描述网络通信中的 帧传输时延&#xff08;Frame Delay&#xff09;、传播时延&#xff08;Propagation Delay&#xff09;&#xff0c;以及 链接利用率&#xff08;Link Utilization&#xff09; 的相关…

十年创业记-01-草根搭上时代快车

十年创业的点点滴滴&#xff0c;记录起步、发展到壮大的过程&#xff0c;有失败的教训&#xff0c;有成功的经验&#xff0c;也有一些建议&#xff0c;与君共勉。 今年35岁&#xff0c;创业的第九年&#xff0c;坐标十八线小城市&#xff0c;软件外包行业。从2015年20万的营业额…

MyBatis 源码系列:MyBatis 解析配置文件、二级缓存、SQL

文章目录 解析全局配置文件二级缓存解析解析二级缓存缓存中的调用过程缓存中使用的设计模式 解析SQL 解析全局配置文件 启动流程分析 String resource "mybatis-config.xml"; //将XML配置文件构建为Configuration配置类 reader Resources.getResourceAsReader(re…

1.30 C++ day4

思维导图 构造函数、析构函数、拷贝构造函数、拷贝赋值函数 代码 #include <iostream>using namespace std;class Stu//封装一个学生类 { private://私有属性string name;int id;double *score; public://公共属性//无参构造函数Stu(){cout << "Stu::无参构…

leetcode514. 自由之路【线性dp】

原题链接&#xff1a;leetcode514. 自由之路 题目描述 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring &#xff0c;表示刻在外环上的编码&…

浅谈智能照明控制系统在智慧建筑中的应用-安科瑞 蒋静

摘要&#xff1a;新时期&#xff0c;建筑行业发展迅速&#xff0c;在信息化背景下&#xff0c;建筑功能逐渐拓展&#xff0c;呈现了智能化的发展态势。智能建筑更加安全、节能、环保&#xff0c;也符合绿色建筑理念。在建筑智能化发展背景下&#xff0c;智能照明系统受到了各界…

全国网络安全行业职业技能大赛WP

word_sercet 文档被加密 查看图片的属性 在备注可以看到解压密码 解密成功 在选项里面把隐藏的文本显示出来 可以看到ffag easy_encode 得到一个bmp二维码 使用qr research 得到的密文直接放瑞士军刀 base32解码base64解码hex解码 dir_pcap 直接搜索flag 发现flag…

虹科干货 | 如何使用nProbe Cento构建100 Gbit NetFlow 传感器

本文是一份全面的指南&#xff0c;解释了如何使用nProbe Cento构建一个高效的100 Gbit NetFlow传感器。旨在帮助大家充分利用NetFlow技术&#xff0c;以监控和分析高速网络流量。 当需要监控分布式网络&#xff0c;了解流经上行链路或关键网段的网络流量时&#xff0c;NetFlow…