如何用六步教会你使用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 dataframe astype 字段类型转换方法
Apr 11 Python
解决python大批量读写.doc文件的问题
May 08 Python
Python中if elif else及缩进的使用简述
May 31 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
python中使用while循环的实例
Aug 05 Python
python如果快速判断数字奇数偶数
Nov 13 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
Python实现自动签到脚本功能
Aug 20 Python
python把一个字符串切开的实例方法
Sep 27 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
Python自动化测试PO模型封装过程详解
Jun 22 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
php pdo操作数据库示例
2017/03/10 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
python中异常报错处理方法汇总
2016/11/20 Python
python设置值及NaN值处理方法
2018/07/03 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python常用函数与用法示例
2019/07/02 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
搞笑车尾标语
2014/06/23 职场文书
会计学毕业生求职信
2014/06/25 职场文书
2014年质量工作总结
2014/11/22 职场文书
同意转租证明
2015/06/24 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js