如何用六步教会你使用python爬虫爬取数据


Posted in Python onApril 06, 2022

前言:

用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。

python爬出六部曲

第一步:安装requests库和BeautifulSoup库:

在程序中两个库的书写是这样的:

import requests
from bs4 import BeautifulSoup

由于我使用的是pycharm进行的python编程。所以我就讲讲在pycharm上安装这两个库的方法。在主页面文件选项下,找到设置。进一步找到项目解释器。之后在所选框中,点击软件包上的+号就可以进行查询插件安装了。有过编译器插件安装的hxd估计会比较好入手。具体情况就如下图所示。

如何用六步教会你使用python爬虫爬取数据

如何用六步教会你使用python爬虫爬取数据

第二步:获取爬虫所需的header和cookie:

我写了一个爬取微博热搜的爬虫程序,这里就直接以它为例吧。获取header和cookie是一个爬虫程序必须的,它直接决定了爬虫程序能不能准确的找到网页位置进行爬取。

首先进入微博热搜的页面,按下F12,就会出现网页的js语言设计部分。如下图所示。找到网页上的Network部分。然后按下ctrl+R刷新页面。如果,进行就有文件信息,就不用刷新了,当然刷新了也没啥问题。然后,我们浏览Name这部分,找到我们想要爬取的文件,鼠标右键,选择copy,复制下网页的URL。就如下图所示。

如何用六步教会你使用python爬虫爬取数据

 复制好URL后,我们就进入一个网页Convert curl commands to code。这个网页可以根据你复制的URL,自动生成header和cookie,如下图。生成的header和cookie,直接复制走就行,粘贴到程序中。

如何用六步教会你使用python爬虫爬取数据

#爬虫头数据
cookies = {
    'SINAGLOBAL': '6797875236621.702.1603159218040',
    'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V',
    'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ',
    '_s_tentry': 'www.baidu.com',
    'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com',
    'Apache': '7782025452543.054.1635925669528',
    'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256',
}
headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}
params = (
    ('cate', 'realtimehot'),
)

复制到程序中就像这样。这是微博热搜的请求头。

第三步:获取网页:

我们将header和cookie搞到手后,就可以将它复制到我们的程序里。之后,使用request请求,就可以获取到网页了。

#获取网页
response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies)

第四步:解析网页:

这个时候,我们需要回到网页。同样按下F12,找到网页的Elements部分。用左上角的小框带箭头的标志,如下图,点击网页内容,这个时候网页就会自动在右边显示出你获取网页部分对应的代码。

如何用六步教会你使用python爬虫爬取数据

如何用六步教会你使用python爬虫爬取数据

如上图所示,我们在找到想要爬取的页面部分的网页代码后,将鼠标放置于代码上,右键,copy到selector部分。就如上图所示。

第五步:分析得到的信息,简化地址:

其实刚才复制的selector就相当于网页上对应部分存放的地址。由于我们需要的是网页上的一类信息,所以我们需要对获取的地址进行分析,提取。当然,就用那个地址也不是不行,就是只能获取到你选择的网页上的那部分内容。

#pl_top_realtimehot > table > tbody > tr:nth-child(1) > td.td-02 > a
#pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a
#pl_top_realtimehot > table > tbody > tr:nth-child(9) > td.td-02 > a

这是我获取的三条地址,可以发现三个地址有很多相同的地方,唯一不同的地方就是tr部分。由于tr是网页标签,后面的部分就是其补充的部分,也就是子类选择器。可以推断出,该类信息,就是存储在tr的子类中,我们直接对tr进行信息提取,就可以获取到该部分对应的所有信息。所以提炼后的地址为:

#pl_top_realtimehot > table > tbody > tr > td.td-02 > a

这个过程对js类语言有一定了解的hxd估计会更好处理。不过没有js类语言基础也没关系,主要步骤就是,保留相同的部分就行,慢慢的试,总会对的。

第六步:爬取内容,清洗数据

这一步完成后,我们就可以直接爬取数据了。用一个标签存储上面提炼出的像地址一样的东西。标签就会拉取到我们想获得的网页内容。

#爬取内容
content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"

之后我们就要soup和text过滤掉不必要的信息,比如js类语言,排除这类语言对于信息受众阅读的干扰。这样我们就成功的将信息,爬取下来了。

fo = open("./微博热搜.txt",'a',encoding="utf-8")
a=soup.select(content)
for i in range(0,len(a)):
    a[i] = a[i].text
    fo.write(a[i]+'\n')
fo.close()

我是将数据存储到了文件夹中,所以会有wirte带来的写的操作。想把数据保存在哪里,或者想怎么用,就看读者自己了。

爬取微博热搜的代码实例以及结果展示:

import os
import requests
from bs4 import BeautifulSoup
#爬虫头数据
cookies = {
    'SINAGLOBAL': '6797875236621.702.1603159218040',
    'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V',
    'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ',
    '_s_tentry': 'www.baidu.com',
    'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com',
    'Apache': '7782025452543.054.1635925669528',
    'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256',
}
headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}
params = (
    ('cate', 'realtimehot'),
)
#数据存储
fo = open("./微博热搜.txt",'a',encoding="utf-8")
#获取网页
response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies)
#解析网页
response.encoding='utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
#爬取内容
content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"
#清洗数据
a=soup.select(content)
for i in range(0,len(a)):
    a[i] = a[i].text
    fo.write(a[i]+'\n')
fo.close()

如何用六步教会你使用python爬虫爬取数据

总结

到此这篇关于如何用六步教会你使用python爬虫爬取数据的文章就介绍到这了,更多相关python爬虫爬取数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
零基础写python爬虫之爬虫的定义及URL构成
Nov 04 Python
python用来获得图片exif信息的库实例分析
Mar 16 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
对pandas中apply函数的用法详解
Apr 10 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
python使用递归的方式建立二叉树
Jul 03 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
pip安装tensorflow的坑的解决
Apr 19 Python
Python极值整数的边界探讨分析
Sep 15 Python
基于Python实现射击小游戏的制作
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
浅谈Python中对象是如何被调用的
Apr 06 #Python
Python实现猜拳与猜数字游戏的方法详解
python字符串的一些常见实用操作
Apr 06 #Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 #Python
You might like
php 分页类 扩展代码
2009/06/11 PHP
PHP中文乱码解决方案
2015/03/05 PHP
php生成验证码函数
2015/10/20 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python创建日历实例
2014/08/21 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
对python中的高效迭代器函数详解
2018/10/18 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python pandas模块基础学习详解
2019/07/03 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Java基础面试题
2014/07/19 面试题
初中生学习的自我评价
2013/11/14 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
医生个人年终总结
2015/02/28 职场文书
教师节联欢会主持词
2015/07/04 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
浅谈PHP7中的一些小技巧
2021/05/29 PHP
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android