Python——爬虫入门

news2024/9/24 11:32:09

爬虫的流程

第一步:获取网页内容

浏览器访问网页时也是一样,都是先发个请求获取网页内容,但是浏览器多了个渲染的步骤。

程序获取的内容都是网页源代码

第二步:解析网页内容

第三步:储存或分析数据

要做数据集就存起来,要做数据分析就形成图标之类的东西

通过robots.txt文件查看可爬取的网页范围

 HTTP请求和响应

请求

两个请求方式 

完整HTTP请求例子

 请求行包括请求的路径和HTTP协议,路径后面+?可以传递额外的查询参数,多用于Get请求,使用&进行分隔。

请求头包含给服务器的信息

Host指主机域名,通过DNS解析后可以找到主机IP,结合请求头里的资源路径就是一个完整的网址。

User-Agent用于告知服务器客户端的相关信息

Accept是告诉服务器客户端想接受的响应数据类型 响应

  组成

状态行 

常见状态码 

响应头 

包含生成响应的时间和返回内容的类型和编码格式

响应体 

类型是HTML就返回HTML内容,是JSON就返回json内容

使用Python Requests库发送请求和获取响应数据

首先要先安装Requests库

在终端输入

pip install requests

使用requests发送请求,这里网站是我的博客网站

使用requests库发送请求时会自动生成请求头的其他信息,不需要手动指定

import requests
respose=requests.get("http://yhy2002.com/")
print(respose)
#响应的状态码
print(respose.status_code)
print(respose.ok)
#响应体
print(respose.text)

成功获得响应 

 如果要修改请求头的话要指定一个header的参数

用处:把爬虫程序伪装成正常浏览器

 使用浏览器发送请求时请求头会自动带有浏览器类型和版本和电脑操作系统,用代码发送的话不会有。

对于一些网站会过滤非浏览器的请求,拒绝来自程序的请求

 

 

状态码用于判断请求是否成功

 

 使用requests获取豆瓣电影top250的源码

豆瓣电影 Top 250

 

import requests
response = requests.get("https://movie.douban.com/top250")

print(response.status_code)

输出418状态码:这里是因为豆瓣服务器针对爬虫做的处理

 自动请求头伪装浏览器

使用f12可以看见右下角有User-Agent:

放到自定义请求头里面即可 

import requests
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("https://movie.douban.com/top250", headers=headers)

print(response.status_code)
print(response.text)

 正常输出

 使用Beautiful Soup解析HTML内容

在终端输入

pip install bs4

Beautiful Soup是用到的类,要从bs4进行引入

 Beautiful Soup会把内容解析成一个树状结构

 

from bs4 import BeautifulSoup
import requests
content=requests.get("https://www.yhy2002.com/").text
#使用BeautifulSoup解析获取的网页内容,要指定解析器
#并返回一个实例对象
soup=BeautifulSoup(content,"html.parser")


#打印第一个title标签内容
print(soup.title)
#打印第一个img标签
print(soup.img)

#根据标签和属性造出所有符合要求的元素
list=soup.findAll("img",attrs={})
#attrs={"class":"p_color"},这个可选可不选
for a in list:
    print(a)
    #string属性可以把标签包围的文字返回
    print(a.string)
    #打印string中索引值大于2的部分
    print(a.string[2:])

输出

 查找包含在同一类标签下的子元素

 使用findall方法进行两重循环 

提取豆瓣电影top250的所有标题

可以看见所有标题都是一个span元素,并且class的值都是一个title 

from bs4 import BeautifulSoup
import requests

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"
}
html=requests.get("https://movie.douban.com/top250" , headers=headers).text

#获得解析后的实例对象
soup = BeautifulSoup(html,"html.parser")

all_titles = soup.findAll("span", attrs={"class":"title"})

for title in all_titles:
    title_string=title.string
    if("/" not in title_string):
        print(title.string)

 输出获取的第一页25个电影的值

 在第二页的链接只是增加了一个https://movie.douban.com/top250?start=25&filter=

start=25&filter=

因此使用for循环+range获取对应页面的电影

from bs4 import BeautifulSoup
import requests


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"
}
for start_num in range(0,250,25):
    html=requests.get(f"https://movie.douban.com/top250?start={start_num}" , headers=headers).text
    #获得解析后的实例对象
    soup = BeautifulSoup(html,"html.parser")
    all_titles = soup.findAll("span", attrs={"class":"title"})
    for title in all_titles:
        title_string=title.string
        if("/" not in title_string):
            print(title.string)

 输出:成功获取完整电影名单

H:\jetbrains\PyCharm\python_projects\venv\Scripts\python.exe H:\jetbrains\PyCharm\python_projects\demo.py 
肖申克的救赎
霸王别姬
阿甘正传
泰坦尼克号
这个杀手不太冷
千与千寻
美丽人生
辛德勒的名单
星际穿越
盗梦空间
楚门的世界
忠犬八公的故事
海上钢琴师
三傻大闹宝莱坞
放牛班的春天
机器人总动员
无间道
疯狂动物城
控方证人
大话西游之大圣娶亲
熔炉
教父
触不可及
当幸福来敲门
龙猫
怦然心动
末代皇帝
寻梦环游记
活着
蝙蝠侠:黑暗骑士
哈利·波特与魔法石
指环王3:王者无敌
乱世佳人
我不是药神
飞屋环游记
素媛
哈尔的移动城堡
十二怒汉
何以为家
摔跤吧!爸爸
让子弹飞
鬼子来了
天空之城
猫鼠游戏
少年派的奇幻漂流
海蒂和爷爷
钢琴家
大话西游之月光宝盒
指环王2:双塔奇兵
闻香识女人
罗马假日
天堂电影院
死亡诗社
绿皮书
大闹天宫
黑客帝国
指环王1:护戒使者
教父2
狮子王
辩护人
饮食男女
搏击俱乐部
美丽心灵
本杰明·巴顿奇事
穿条纹睡衣的男孩
窃听风暴
情书
两杆大烟枪
西西里的美丽传说
音乐之声
看不见的客人
阿凡达
拯救大兵瑞恩
小鞋子
飞越疯人院
哈利·波特与死亡圣器(下)
沉默的羔羊
布达佩斯大饭店
禁闭岛
蝴蝶效应
致命魔术
功夫
心灵捕手
海豚湾
哈利·波特与阿兹卡班的囚徒
低俗小说
春光乍泄
超脱
美国往事
摩登时代
喜剧之王
致命ID
杀人回忆
七宗罪
红辣椒
加勒比海盗
哈利·波特与密室
一一
狩猎
唐伯虎点秋香
7号房的礼物
被嫌弃的松子的一生
请以你的名字呼唤我
断背山
剪刀手爱德华
入殓师
爱在黎明破晓前
勇敢的心
蝙蝠侠:黑暗骑士崛起
第六感
重庆森林
幽灵公主
超能陆战队
爱在日落黄昏时
菊次郎的夏天
甜蜜蜜
天使爱美丽
阳光灿烂的日子
借东西的小人阿莉埃蒂
小森林 夏秋篇
完美的世界
消失的爱人
无人知晓
倩女幽魂
寄生虫
时空恋旅人
侧耳倾听
小森林 冬春篇
幸福终点站
驯龙高手
一个叫欧维的男人决定去死
教父3
未麻的部屋
萤火之森
怪兽电力公司
哈利·波特与火焰杯
傲慢与偏见
玩具总动员3
新世界
釜山行
神偷奶爸
被解救的姜戈
玛丽和马克思
告白
大鱼
哪吒闹海
射雕英雄传之东成西就
喜宴
茶馆
头号玩家
模仿游戏
阳光姐妹淘
九品芝麻官
我是山姆
花样年华
色,戒
血战钢锯岭
恐怖直播
七武士
头脑特工队
惊魂记
黑客帝国3:矩阵革命
你的名字。
电锯惊魂
三块广告牌
达拉斯买家俱乐部
疯狂原始人
心迷宫
谍影重重3
上帝之城
英雄本色
卢旺达饭店
纵横四海
风之谷
海街日记
爱在午夜降临前
绿里奇迹
记忆碎片
岁月神偷
忠犬八公物语
疯狂的石头
荒蛮故事
雨中曲
小丑
背靠背,脸对脸
小偷家族
2001太空漫游
爆裂鼓手
无敌破坏王
无间道2
心灵奇旅
贫民窟的百万富翁
冰川时代
恐怖游轮
东邪西毒
牯岭街少年杀人事件
魔女宅急便
遗愿清单
东京教父
你看起来好像很好吃
真爱至上
大佛普拉斯
黑天鹅
可可西里
城市之光
源代码
雨人
海边的曼彻斯特
恋恋笔记本
初恋这件小事
人工智能
波西米亚狂想曲
虎口脱险
青蛇
终结者2:审判日
疯狂的麦克斯4:狂暴之路
罗生门
萤火虫之墓
新龙门客栈
千钧一发
末路狂花
崖上的波妞
无耻混蛋
奇迹男孩
彗星来的那一夜
二十二
花束般的恋爱
黑客帝国2:重装上阵
爱乐之城
血钻
战争之王
房间
步履不停
芙蓉镇
魂断蓝桥
火星救援
哈利·波特与死亡圣器(上)
千年女优
谍影重重2
弱点
阿飞正传
谍影重重
燃情岁月
朗读者
白日梦想家
再次出发之纽约遇见你
哈利·波特与凤凰社
蜘蛛侠:平行宇宙
香水
穿越时空的少女

 

扩展:

使用正则表达式可以更加精确的匹配一个或者多个目标字符 

使用多线程可以同时爬取多个页面

 

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

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

相关文章

【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值

上一篇博客介绍了BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值,神经网络用的是BP神经网络,本篇博客将BP神经网络替换成GRNN神经网络,希望能帮助大家快速入门GRNN网络。 1.背景条件 要求:对于未知模型(…

scratch 角色追踪

scratch 角色追踪 本程序中一个角色移动到随机位置和方向后向前移动,碰到边缘反弹;另一个角色跟随前一个角色,两个角色接触后前者重新取随机位置。 程序内容如下

Linux——进程信号详解

目录 一.进程信号的理解 1.1定义: 1.2举例: 1.3总结: 二.进程信号地使用: 2.1信号种类: 2.2而操作系统向进程发送信号地方式有四种: 2.2.1以键盘的方式向进程发送信号 接下来介绍一个系统调用函数sign…

【项目】C++实现高并发内存池

文章目录 一、项目介绍1.1 项目原型1.2 池化技术1.3 内存池主要解决的问题1.4 malloc理解 二、定长内存池实现三、高并发内存池的三层申请内存框架设计3.1 thread cache层的设计3.1.1 thread cache整体框架3.1.2 哈希桶映射对齐规则3.1.3 thread cacheTLS无锁访问 3.2 central …

【剑指offer】10. 矩阵中的路径(java)

文章目录 矩阵中的路径描述示例1示例2思路完整代码 矩阵中的路径 描述 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右&…

springboot切面应用

1、切面场景 无侵入的实现功能增强 2、实现 切面类的实现 需要使用注解Aspect和Componet来实现, 环绕通知的作用在返回的student的sname后面拼接around字符串。 后置通知的作用在入参后面拼接idididdi,然后打印日志 Aspect Component public class…

English Learning - L3 纠音 W9 Lesson7-8 Ted Living Beyond Limits 2023.7.4 周二

朗读内容: Lesson 7-8 Day 52 - 60 句子 Ted Living Beyond Limits 23-50

使用Python爬虫和数据可视化,揭示人口大国历年人数的变迁

前言 人口大国通常在全球人口排名中位居前列,其人口数量远远超过其他国家。而印度和中国这两个国家的人口数量均已经超过14亿,而当前全球的人口总数也不过刚刚突破80亿而已,妥妥的天花板级别存在。或许是中国和印度在人口方面的表现太过“耀…

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了,原本想直接学学Ethercat,但是简单看了看对象字典啥的概念一头雾水的,决定先从CANopen开始,Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记,我似乎是看懂了些&am…

非主流币波段策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

数据合并--Pandas

1. 键匹配合并:merge()函数 1.1 函数功能 合并DataFrame或者命名的Series,命名的Series被视为单列的DataFrame 1.2 函数语法 pandas.merge(left, right, howinner, onNone, left_onNone, right_onNone, left_indexFalse, right_indexFalse, sortFalse, suffixes…

最长公共子序列LCA

最长连续公共子序列 题目链接:3692. 最长连续公共子序列 - AcWing题库 /*解法:定义dp[i1][j1]为以a[i]结尾的字符串和b[j]结尾的字符串的最长连续公共子序列那么对于a[i] b[j]的时候 dp[i1][j1] dp[i][j]1否则为0 其他就是细枝末节 */ #include<iostream> #include<…

【shiro】springboot整合shiro

springboot整合shiro&#xff0c;实现用户登录认证&#xff0c;权限校验及rememberMe 1.数据库准备 user 用户表 CREATE TABLE user (id bigint NOT NULL,name varchar(30) DEFAULT NULL,pwd varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,ri…

《Java核心技术大会2023》——AIC送书第一期

共同深入探讨 Java 生态&#xff01;直播预约&#xff1a;视频号“IT阅读排行榜” 大会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家&#xff1b;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近…

smale周报

2023.7.7 相关工作近况存在的问题展望 相关工作近况 近期仍就进行3D断层识别实验&#xff0c;实验了很多版本&#xff0c;不同的损失函数和模型&#xff0c;发现当下的效果更好。之前loss一直不正常&#xff0c;改变了之前的一些小问题&#xff0c;使模型和损失函数以及数据匹…

具备捕获 Web2 用户能力的 PoseiSwap,治理通证$POSE再度涨超 360%

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…

Ubuntu 的移动梦醒了

老实讲&#xff0c;移动版 Ubuntu 在手机、平板上的发展自始至终可能都没有达到过 Canonical 的期望&#xff0c;既然如此&#xff0c;不再勉为其难地坚持下去&#xff0c;或许才是更加明智的做法。 时至今日&#xff0c;官方显然也意识到了这一点&#xff0c;在早些时候发布的…

EPSON机械臂控制记录

我使用的机器人型号为EPSON LS3-4013&#xff0c;在本文中记录了机械臂控制器和电脑连接&#xff0c;及电脑程序控制机械臂的完整流程。 1 USB连接电脑和机械臂 将USB连接电脑和控制器的PC插口。在EPSON RC 软件中选择 设置->电脑和控制器通信。其中默认包括USB通信&#…

标签平滑知识点

一、什么是标签平滑 标签平滑&#xff08;Label smoothing&#xff09;&#xff0c;像L1、L2和dropout一样&#xff0c;是机器学习领域的一种正则化方法&#xff0c;通常用于分类问题&#xff0c;目的是防止模型在训练时过于自信地预测标签&#xff0c;改善泛化能力差的问题。…

OK Print Watch 打印服务监控软件---Crack

O&K Print Watch 是一个服务器端打印监视器。此打印审核工具允许用户控制打印作业、纸张使用情况&#xff0c;并从打印服务器、本地、共享或网络打印机收集统计信息。使用O&K Print Watch&#xff0c;您可以根据许多不同的打印限制为用户定义打印配额。这些功能使用户能…