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

专注Python、AI、大数据,请关注公众号七步编程!
在不同公司的许多人可能出于各种原因需要从Internet收集外部数据:分析竞争,汇总新闻摘要、跟踪特定市场的趋势,或者收集每日股票价格以建立预测模型……
无论你是数据科学家还是业务分析师,都可能时不时遇到这种情况,并问自己一个永恒的问题:我如何才能提取该网站的数据以进行市场分析?
提取网站数据及其结构的一种可能的免费方法是爬虫 。
在本文中,你将了解如何通过Python轻松的完成数据爬虫任务 。
凭借这5步,我30分钟学会了Python爬虫

文章插图
 
什么是爬虫?广义上讲,数据爬虫是指以编程方式提取网站数据并根据其需求进行结构化的过程 。
许多公司正在使用数据爬虫来收集外部数据并支持其业务运营:这是当前在多个领域中普遍的做法 。
我需要了解什么才能学习python中的数据抓取?
很简单,但是需要首先具备一些Python和html知识 。
另外,需要了解两个非常有效的框架,例如,Scrapy或Selenium 。
详细介绍接下来,让我们学习如何将网站变成结构化数据!
为此,首先需要安装以下库:
  • requests:模拟HTTP请求(例如GET和POST), 我们将主要使用它来访问任何给定网站的源代码
  • BeautifulSoup:轻松解析HTML和XML数据
  • lxml:提高XML文件的解析速度
  • pandas:将数据构造为Dataframes并以您选择的格式(JSON,Excel,CSV等)导出
如果你使用的是Anaconda,配置起来会非常简单,这些软件包都已预先安装 。
如果不是使用Anaconda,需要通过如下命令安装工具包:
pip install requestspip install beautifulsoup4pip install lxmlpip 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.contentparsed_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标签下:


推荐阅读