凭借这5步,我30分钟学会了Python爬虫! |
您所在的位置:网站首页 › 收集数据时需要完成的任务 › 凭借这5步,我30分钟学会了Python爬虫! |
在不同公司的许多人可能出于各种原因需要从Internet收集外部数据:分析竞争,汇总新闻摘要、跟踪特定市场的趋势,或者收集每日股票价格以建立预测模型…… 无论你是数据科学家还是业务分析师,都可能时不时遇到这种情况,并问自己一个永恒的问题:我如何才能提取该网站的数据以进行市场分析? 提取网站数据及其结构的一种可能的免费方法是爬虫。 在本文中,你将了解如何通过Python轻松的完成数据爬虫任务。 广义上讲,数据爬虫是指以编程方式提取网站数据并根据其需求进行结构化的过程。 许多公司正在使用数据爬虫来收集外部数据并支持其业务运营:这是当前在多个领域中普遍的做法。 我需要了解什么才能学习python中的数据抓取? 很简单,但是需要首先具备一些Python和HTML知识。 另外,需要了解两个非常有效的框架,例如,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为例进行演示。 该以优质美容新闻为主,它发布了美容市场的最新趋势。 查看首页,你会看到我们要抓取的文章以网格形式组织。 ![]() 前面,已经介绍了基本的内容以及需要用到的工具包。 接下来,就是正式编码实践的步骤。 首先,需要导入基础工具包: 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检查器中检查此元素: 使用BeautifulSoup提取页面内容后,可以使用find方法提取标题。 title = soup_post.find("h1", {"class": "article-title"}).text接下来,看一下日期: 使用BeautifulSoup将其转换为代码非常容易: datetime = soup_post.find("header", {"class": "row sub- header"}).find("span")["datetime"]下一步就是摘要: 现在,需要爬取帖子的全文内容。如果已经理解了前面的内容,那么这部分会非常容易。 该内容在article-text类的div内的多个段落(p标签)中。 下面,让我们把它们放在同一个函数内看一下: 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如果我们检查主页的源代码,会看到每个页面文章的标题:
下面,提取每个页面的文章就很容易了: 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"] 分页在给定页面上提取帖子后,需要转到下一页并重复相同的操作。 如果查看分页,需要点击“下一个”按钮: 换句话说,当下一个按钮处于有效状态时,就需要执行爬虫操作,移至下一页并重复该操作。当按钮变为无效状态时,该过程应停止。 总结此逻辑,这将转换为以下代码: 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()
如果对Python感兴趣的话,可以试试我的学习方法以及相关的学习资料 可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。 Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。 观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 检查学习结果。 我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |