Python爬虫系列(一)——手把手教你写Python爬虫_python写爬虫-程序员宅基地

技术标签: 爬虫  python  数据挖掘  Python  

1. 什么是爬虫?

根据百度百科的定义,网络爬虫,又称为网页蜘蛛,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

人们如今的生活,大都离不开网络,发一条微信,电子支付买一杯奶茶,刷一条微博,等等,都依赖于网络的便携性。但是,互联网茁壮成长的同时,海量的信息每天也会以指数级增长的方式充斥到网络环境中,那么如何快速高效地找到我们需要的信息,成为了很关键的功能,于是搜索引擎诞生了。搜索引擎替我们把很多网络信息做了筛选,当我们查询某项内容时,搜索引擎可以计算出一个排名,来展现查询相关的内容。那么面对海量的信息,搜索引擎就是利用爬虫对数据进行了整合和筛选操作,为人们在网络海洋中快速挖掘有用的信息提供了便利。

image-20211023141009052

既然搜索引擎这么好用了,那么我们为什么还要写爬虫?是因为有时我们有更加个性化的搜索需求,比如我们希望获取猫眼电影中排名前一百名的电影的评论内容,并根据评论做情感分析。面对这个需求,搜索引擎的作用就比较局限了。那么要实现这个功能,第一步的获取出这些相关信息就需要我们动手写爬虫了。

image-20211023142130569

很多语言都可以写爬虫,包括python,java、c++等。而Python本身是开源的,很多大佬为Python的功能扩展写了很多成熟的工具,也就是网络上常说的xx库,我们可以利用这些工具快速实现我们的需求,比较好入门。

另外,需要强调的是,网络上并不是什么东西都可以爬,针对这个问题,我国有着一套完备的法律。爬了不该爬的内容,比如大量个人信息,那可以快速实现“从入门到入狱”。

2. 了解网页

网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JS(活动脚本语言)。

我们每次请求数据,服务器都会把由这三部分组成的内容发送过来,再经浏览器编译,就出现了我们看到的界面。实际上爬虫获取信息也是相似的流程,向服务器请求数据,请求到的数据存储到内存中,然后解析出我们想要的信息。

image-20211023143012228

每个浏览器关于查看网页源码有着不同的操作,以谷歌浏览器为例,是在页面中点击鼠标右键,再选择“检查”,在出现的框中选择元素(Elements),我们使用爬虫查询的内容也就包含在这些元素中。

image-20211023143420275

比如,我们可以找到百度首页内热搜的第一条数据信息。(鼠标指向某一行,相应的内容就会以“蓝框”的形式在界面中标记出来)

image-20211023144015064

3. 爬取CSDN页面信息演示

比如我就要爬我在CSDN的主页信息(红框部分)

image-20211023144713297

  1. 分析页面

第一步,分析页面,找到这些数据在哪。

打开元素,当鼠标停留在下图这一行时,界面上的这一部分内容被蓝框选中,表示数据就在这个div内

image-20211023145033320

接着往下找,可以找到一个列表,包含了四个元素,分别对应了界面上的四条数据。

image-20211023145211109

打开其中一个,我们就找到了这个数据。(其它数据同理)

image-20211023145408575

  1. 导包

既然使用python,我们就要利用python成熟的工具,这个示例需要用到三个包。

  • requests
  • bs4
  • lxml

requests翻译为“请求”,这个库就是帮助我们向服务器中请求数据的工具;BeautifulSoup是解析工具,它可以解析网页数据,可以快速提取出所需要的信息,如今BeautifulSoup已经被包含在bs4库中,直接下载bs4库即可;lxml是python的一个解析库,和BeautifulSoup配合使用,能够快速解析出页面信息。

image-20211023150458882

导入包(lxml不需要导入)

import requests
from bs4 import BeautifulSoup
  1. 设置url和身份标识

设置要访问的url

url = 'https://blog.csdn.net/cun_king'  # 待访问的url地址

设置user-agent,user-agent是身份标识,这里用来模拟是真人的请求操作。

那么为什么需要模拟真人操作呢?首先给出一个结论,网站是不喜欢爬虫的,所以一般网站都会设置一定的反爬机制。很多爬虫向服务器请求数据,或者爬虫要请求很多信息时,会给服务器造成很大压力,严重时可能导致服务器宕机,那么,针对爬虫就会产生对应的反爬机制,比如识别user-agent就是一个初级的反爬机制,当访问者没有携带user-agent时,网站就会默认访问者是爬虫,从而可以拒绝提供信息反馈。

怎么找user-agent?选择网络(如下图),然后刷新界面信息

image-20211023152048514

随便选择一个文件,再选择“标头”,展示的内容是根据http协议用来请求数据所携带的头部,user-agent就包含在里面

image-20211023152148677

user-agent在标头的最下方

image-20211023152304897

将user-agent复制出来,在程序中写成一个字典的形式

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30'} 
  1. 请求数据并解析
strhtml = requests.get(url, headers=headers)  # Get方式获取网页数据
soup = BeautifulSoup(strhtml.text, 'lxml')  # 将请求到的数据解析为lxml格式
info = soup.select()  # 筛选数据,这里需要加一个参数

注意!soup.select()包含了一个重要参数,这个参数就是筛选数据的条件。

回到“元素”,找到刚才“被访问量”对应的那条div,点击鼠标右键–>复制–>复制selector

image-20211023153228240

这样会得到一个选择器,也就是select()的参数

info = = soup.select('#floor-user-profile_485 > div > div.user-profile-head > div.user-profile-head-info.user-profile-wrapper > div.user-profile-head-info-b > ul > li:nth-child(1) > div.user-profile-statistics-num')

筛选出来的info是一个迭代器,但是由于现在只获取到一条数据,因此可以直接输出看看

print("访问量:" + info[0].get_text())

image-20211023153451377

可以发现已经获取到了目标信息,获取其它三条数据同理。

完整代码:

import requests 
from bs4 import BeautifulSoup

url = 'https://blog.csdn.net/cun_king'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30'}
strhtml = requests.get(url, headers=headers)  # Get方式获取网页数据
soup = BeautifulSoup(strhtml.text, 'lxml')
info = soup.select('#floor-user-profile_485 > div > div.user-profile-head > '
                    'div.user-profile-head-info.user-profile-wrapper > div.user-profile-head-info-b > ul > '
                    'li:nth-child(1) > div.user-profile-statistics-num')
print("访问量:" + info[0].get_text())

事实上,我们可以修改选择器,因为四条数据也是按列表形式排列的,所有我们可以一块获取,然后循环输出。

import requests  # 导入requests包
from bs4 import BeautifulSoup

url = 'https://blog.csdn.net/cun_king'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30'}
strhtml = requests.get(url, headers=headers)  # Get方式获取网页数据
# print(strhtml.text)
soup = BeautifulSoup(strhtml.text, 'lxml')

info = soup.select('#floor-user-profile_485 > div > div.user-profile-head > div.user-profile-head-info.user-profile-wrapper > div.user-profile-head-info-b > ul > li')

for item in info:
    print(item.get_text())

image-20211023154202759

4. 爬取图片信息

以爬取百度图片为例。

这一部分我写在另一篇文章了,Python爬虫批量下载百度图片–点击跳转

5. 后言

爬虫还是比较好入门的,这得益于成熟的爬虫工具。

爬虫可以满足自己的个性化搜索需求,大家赶快动手试试吧。(

如果觉得文章还不错的话,留个赞再走吧,非常感谢!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cun_king/article/details/120921849

智能推荐

优思学院:质量管理7原则、8大要点_组织需要管理其与有关的 的关系-程序员宅基地

文章浏览阅读98次。在质量管理的道路上,没有捷径可循。质量管理是一项需要不断积累经验和智慧的长期过程,其中涵盖了七大关键原则,这些原则是组织在质量管理方面取得持续成功的基石。_组织需要管理其与有关的 的关系

friendly java_关于Java的权限修饰符(public,private,protected,默认friendly)-程序员宅基地

文章浏览阅读538次。以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚.现在总结如下:一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限Java访问权限修饰符包含四个:public,protected,friendly,private;但是,friendly在java中并没有显示的声明,成员变量和方法默认情况下就是friendly权限。现在把它们的访问权限表示出来:(目前展..._访问修饰符friendly

c++ timer-程序员宅基地

文章浏览阅读442次。https://www.cnblogs.com/yunlambert/p/10226468.html#include <iostream>#include <thread>#include <chrono>#include<functional>using namespace std;class Timer { bool clear = false;public: template<typename T> void set_c++ timer

数据结构_顺序查找(C语言)_数据结构顺序查找c语言代码-程序员宅基地

文章浏览阅读1.4w次,点赞29次,收藏172次。从表的一端开始,依次将表中的关键字和给定的值进行比较,若表中的关键字和给定的值相等,则查找成功,反之查找失败。_数据结构顺序查找c语言代码

如何打开虚拟机服务器,虚拟机怎么打开ssh服务器-程序员宅基地

文章浏览阅读1.1k次。虚拟机怎么打开ssh服务器 内容精选换一换本手册介绍如何安装Mind Studio以及安装过程中的故障处理方法。Mind Studio只能安装在Ubuntu服务器上,可以在Ubuntu服务器上使用原生桌面自带的终端gnome-terminal进行安装,也可以在Windows服务器上通过SSH登录到Ubuntu服务器进行安装,因为Mind Studio是一款GUI程序,所以在Win本节操作介绍在Wi..._虚拟机如何进入ssh

【雕爷学编程】Arduino 手册之三角函数 sin()_arduino sin-程序员宅基地

文章浏览阅读928次,点赞3次,收藏11次。sin() 是 Arduino 数学库中的一个函数,它的作用是计算一个角度的正弦值。Arduino 2005 年时面世,作为意大利伊夫雷亚地区伊夫雷亚互动设计研究所的学生设计,目的是为新手和专业人员提供一种低成本且简单的方法,以建立使用传感器与环境相互作用的装置。可以使用 sin() 函数和反正弦函数 asin() 来计算每秒钟物体沿着圆周移动的弧长对应的弧度值,然后除以 PI 得到相对于圆心的角度变化。在使用sin()函数计算角度的正弦值时,确保输入的角度值在正确的范围内。_arduino sin

随便推点

虚拟声卡(虚拟扬声器和虚拟麦克风)应用之音频回环(Virtual Audio Cable)-程序员宅基地

文章浏览阅读1.9k次,点赞22次,收藏29次。首先在了解Virtual Audio Cable音频回环技术之前,我们先介绍几个基础的概念:虚拟声卡:是一种硬件虚拟化技术;基于软件技术虚拟出麦克风或者虚拟扬声器硬件,提供给上层用户程序使用虚拟麦克风和扬声器,例如通过给虚拟扬声器喂送音频数据实现麦克风录音效果。音频回环:跟我们网络通信的回环地址(127.0.0.1)通信一样;所谓的音频回环是内核驱动层直接将麦克风/扬声器的声音直接提交给扬声器/麦克风,可以达到数据硬件层的直接转发的功能。_virtual audio cable

python飞机大战源代码-python飞机大战源码和素材-程序员宅基地

文章浏览阅读965次。1 importpygame2 from plane_sprites import *345 classPlaneGame(object):6 """飞机大战主游戏"""78 def __init__(self):9 print("游戏初始化")1011 #1.创建游戏的..._python飞机大战源代码

eNSP配置OSPF实验_ospf enable 1 area 0.0.0.0-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏22次。实验工具eNSP (AR1220)实验拓扑配置PC110.1.1.2255.255.255.010.1.1.1PC210.1.4.2255.255.255.010.1.4.1R4undo terminal monitor #配置前最好关掉这个终端监控,否则一直弹信息影响操作syssysname R4interface LoopBack0 ip address 10.1.127.1 255.255.255.255 router id _ospf enable 1 area 0.0.0.0

Android wear 2.0发布,完全体 Android Wear 2.0发布-程序员宅基地

文章浏览阅读125次。原标题:完全体 Android Wear 2.0发布 在北京时间今天凌晨的谷歌I/O大会上,谷歌推出了其可穿戴设备操作系统Android Wear的2.0版本,该版本之中最大的特色为允许智能手表脱离智能手机独立运行。在本次Android Wear 2.0更新之中,智能手表将可以通过蓝牙、Wi-Fi甚至移动网络(只要硬件上支持)直接和互联网传输信息,同时此特性也将允许使用Android Wear智能..._android headlines, report: android wear 2.0 will bring android pay to ios.

pyChram导入xlrd库操作xlsx文件报错,解决办法_pycham不支持xlsx-程序员宅基地

文章浏览阅读435次。首先需要命令行输入pip uninstall xlrd 卸载新版本的xlrd,然后输入pip uninstall xlrd==1.2.0,指定安装1.2.0版本的xlrd。pyChram导入xlrd库操作xlsx文件报错:xlrd.biffh.XLRDError: Excel xlsx file;原因是:新版本(2.0.1)的xlrd因安全问题不支持xlsx格式,可以降低xlrd的版本。_pycham不支持xlsx

C语言经典算法之哈希查找_编写函数实现按关键字进行哈希查找,记录比较次数。若查找成功返回哈希表中的位置,-程序员宅基地

文章浏览阅读774次,点赞19次,收藏25次。哈希查找是一种高效的数据检索技术,它利用哈希函数将数据映射到一个固定大小的数组(即哈希表)中。_编写函数实现按关键字进行哈希查找,记录比较次数。若查找成功返回哈希表中的位置,