您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

凭借这5步,我30分钟学会了Python爬虫

时间:2020-12-10 10:57:59  来源:  作者:

专注Python/ target=_blank class=infotextkey>Python、AI、大数据,请关注公众号七步编程

在不同公司的许多人可能出于各种原因需要从Inte.NET收集外部数据:分析竞争,汇总新闻摘要、跟踪特定市场的趋势,或者收集每日股票价格以建立预测模型……

无论你是数据科学家还是业务分析师,都可能时不时遇到这种情况,并问自己一个永恒的问题:我如何才能提取该网站的数据以进行市场分析?

提取网站数据及其结构的一种可能的免费方法是爬虫

在本文中,你将了解如何通过Python轻松的完成数据爬虫任务。

凭借这5步,我30分钟学会了Python爬虫

 

什么是爬虫?

广义上讲,数据爬虫是指以编程方式提取网站数据并根据其需求进行结构化的过程。

许多公司正在使用数据爬虫来收集外部数据并支持其业务运营:这是当前在多个领域中普遍的做法。

我需要了解什么才能学习python中的数据抓取?

很简单,但是需要首先具备一些Pythonhtml知识。

另外,需要了解两个非常有效的框架,例如,Scrapy或Selenium。

详细介绍

接下来,让我们学习如何将网站变成结构化数据!

为此,首先需要安装以下库:

  • requests:模拟HTTP请求(例如GET和POST), 我们将主要使用它来访问任何给定网站的源代码
  • BeautifulSoup:轻松解析HTML和XML数据
  • lxml:提高XML文件的解析速度
  • pandas:将数据构造为Dataframes并以您选择的格式(JSON,Excel,CSV等)导出

如果你使用的是Anaconda,配置起来会非常简单,这些软件包都已预先安装。

如果不是使用Anaconda,需要通过如下命令安装工具包:

pip install requests
pip install beautifulsoup4
pip install lxml
pip install pandas

我们要抓取哪些网站和数据?

这是爬虫过程中首先需要回答的问题。

本文就以爬取Premium Beauty News为例进行演示。

该以优质美容新闻为主,它发布了美容市场的最新趋势。

查看首页,你会看到我们要抓取的文章以网格形式组织。

凭借这5步,我30分钟学会了Python爬虫

 

多页面的组织如下:

凭借这5步,我30分钟学会了Python爬虫

 

当然,我们仅要提取出现在这些页面上的每篇文章的标题,我们将深入每个帖子并获取我们需要的详细内容,例如:

  • 标题
  • 日期
  • 摘要
  • 全文
凭借这5步,我30分钟学会了Python爬虫

 

编码实践

前面,已经介绍了基本的内容以及需要用到的工具包。

接下来,就是正式编码实践的步骤。

首先,需要导入基础工具包:

import requests 
from bs4 import BeautifulSoup 
import pandas as pd 
from tqdm import tqdm_notebook

我通常定义一个函数来解析给定URL的每个页面的内容。

该函数将被多次调用,这里将他命名为parse_url:

def parse_url(url):
    response = requests.get(url)
    content = response.content     
    parsed_response = BeautifulSoup(content, "lxml")     
    return parsed_response

提取每个帖子数据和元数据

首先,我将定义一个函数,该函数提取给定URL的每个帖子的数据(标题,日期,摘要等)。

然后,我们将遍历所有页面的for循环内调用此函数。

要构建我们的爬虫工具,我们首先必须了解页面的基本HTML逻辑和结构。以提取帖子的标题为例,讲解一下。

通过在Chrome检查器中检查此元素:

凭借这5步,我30分钟学会了Python爬虫

 

我们注意到标题出现在 article-title类的h1内。

使用BeautifulSoup提取页面内容后,可以使用find方法提取标题。

title = soup_post.find("h1", {"class": "article-title"}).text

接下来,看一下日期

凭借这5步,我30分钟学会了Python爬虫

 

该日期显示在一个span内,该范围本身显示在row sub-header类的标题内。

使用BeautifulSoup将其转换为代码非常容易:

datetime = soup_post.find("header", {"class": "row sub-  header"}).find("span")["datetime"]

下一步就是摘要

凭借这5步,我30分钟学会了Python爬虫

 

它在article-intro的h2标签下:

abstract = soup_post.find("h2", {"class": "article-intro"}).text

现在,需要爬取帖子的全文内容。如果已经理解了前面的内容,那么这部分会非常容易。

该内容在article-text类的div内的多个段落(p标签)中。

凭借这5步,我30分钟学会了Python爬虫

 

BeautifulSoup可以通过以下一种方式提取完整的文本。而不是遍历每个每个p标签、提取文本、然后将所有文本连接在一起。

content = soup_post.find("div", {"class": "article-text"}).text

下面,让我们把它们放在同一个函数内看一下:

def extract_post_data(post_url):
    soup_post = parse_url(post_url)
    
    title = soup_post.find("h1", {"class": "article-title"}).text
    datetime = soup_post.find("header", {"class": "row sub-header"}).find("span")["datetime"]
    abstract = soup_post.find("h2", {"class": "article-intro"}).text
    content = soup_post.find("div", {"class": "article-text"}).text
    
    data = {
        "title": title,
        "datetime": datetime,
        "abstract": abstract,
        "content": content,
        "url": post_url
    }
    
    return data

提取多个页面上的帖子URL

如果我们检查主页的源代码,会看到每个页面文章的标题:

凭借这5步,我30分钟学会了Python爬虫

 

可以看到,每10篇文章出现在1个post-style1 col-md-6标签下:

下面,提取每个页面的文章就很容易了:

url = "https://www.premiumbeautynews.com/fr/marches-tendances/"
soup = parse_url(url)
section = soup.find("section", {"class": "content"})
posts = section.findAll("div", {"class": "post-style1 col-md-6"})

然后,对于每个单独的帖子,我们可以提取URL,该URL出现在h4标签内部。

我们将使用此URL调用我们先前定义的函数extract_post_data。

uri = post.find("h4").find("a")["href"]

分页

在给定页面上提取帖子后,需要转到下一页并重复相同的操作。

如果查看分页,需要点击“下一个”按钮:

凭借这5步,我30分钟学会了Python爬虫

 

到达最后一页后,此按钮变为无效。

换句话说,当下一个按钮处于有效状态时,就需要执行爬虫操作,移至下一页并重复该操作。当按钮变为无效状态时,该过程应停止。

总结此逻辑,这将转换为以下代码:

next_button = ""
posts_data = []
count = 1
base_url = 'https://www.premiumbeautynews.com/'

while next_button isnotNone:
    print(f"page number : {count}")

    soup = parse_url(url)
    section = soup.find("section", {"class": "content"})
    posts = section.findAll("div", {"class": "post-style1 col-md-6"})

    for post in tqdm_notebook(posts, leave=False):
        uri = post.find("h4").find("a")["href"]
        post_url = base_url + uri
        data = extract_post_data(post_url)
        posts_data.Append(data)
    
    next_button = soup.find("p", {"class": "pagination"}).find("span", {"class": "next"})
    if next_button isnotNone:
        url = base_url + next_button.find("a")["href"]
        count += 1

此循环完成后,将所有数据保存在posts_data中,可以将其转换为漂亮的DataFrames并导出为CSV或Excel文件。

df = pd.DataFrame(posts_data)
df.head()
凭借这5步,我30分钟学会了Python爬虫

 

到这里,就把一个非结构化的网页转化成结构化的数据了!



Tags:Python爬虫   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
#coding=utf-8import requestsimport osimport jsonfrom jsonpath import jsonpathimport timeurl='https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/...【详细内容】
2022-06-29  Tags: Python爬虫  点击:(47)  评论:(0)  加入收藏
利用Python实现中国地铁数据可视化。废话不多说。让我们愉快地开始吧~开发工具Python版本:3.6.4相关模块:requests模块;wordcloud模块;pandas模块;numpy模块;jieba模块;pyecharts模...【详细内容】
2021-12-08  Tags: Python爬虫  点击:(239)  评论:(0)  加入收藏
这个开源项目程序可以持续爬取一个或多个新浪微博用户(如李文di、无疫烦)的数据,并将结果信息写入文件或数据库。写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。...【详细内容】
2021-10-27  Tags: Python爬虫  点击:(116)  评论:(0)  加入收藏
回顾python学习历程,感慨良多,这门语言实在是太强了,当然,分支也很多,有的在做安全,有的在做数据,有的在做爬虫,本文就笔者本身的爬虫入门的小经验分享给读者,期待各位在学习python的...【详细内容】
2021-08-11  Tags: Python爬虫  点击:(150)  评论:(0)  加入收藏
来源:Python数据之道作者:Peter整理:阳哥大家好,我是阳哥。今天来跟大家分享用 BeautifulSoup 获取信息的一些知识点,文章内容由公众号读者 Peter 创作。欢迎各位童鞋向公众号投...【详细内容】
2021-06-23  Tags: Python爬虫  点击:(191)  评论:(0)  加入收藏
前言国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八时隔五年,“双一流”大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人...【详细内容】
2021-04-08  Tags: Python爬虫  点击:(510)  评论:(0)  加入收藏
实施步骤(1) 数据爬取:使用requests请求为基础获取数据源。(2) UA伪装:模拟浏览器访问网址。(3) 数据解析:使用xpath语法处理数据。(4) 数据存储:获取需求数据后使用Excrl进行存...【详细内容】
2021-03-16  Tags: Python爬虫  点击:(291)  评论:(0)  加入收藏
在使用Python本爬虫采集数据时,一个很重要的操作就是如何从请求到的网页中提取数据,而正确定位想要的数据又是第一步操作。...【详细内容】
2021-03-04  Tags: Python爬虫  点击:(291)  评论:(0)  加入收藏
专注Python、AI、大数据,请关注公众号七步编程!在不同公司的许多人可能出于各种原因需要从Internet收集外部数据:分析竞争,汇总新闻摘要、跟踪特定市场的趋势,或者收集每日股票价...【详细内容】
2020-12-10  Tags: Python爬虫  点击:(127)  评论:(0)  加入收藏
我们在写爬虫代码时,常常需要各种分析调试,而且每次直接用代码调试都很麻烦所以今天给大家分享一个工具,不仅能方便模拟发送各种http请求,还能轻松调试,最重要的是,可以将调试最终...【详细内容】
2020-12-07  Tags: Python爬虫  点击:(283)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条