抓取jsp网页源代码(如何应对数据匮乏的问题?最简单的方法在这里)

优采云 发布时间: 2021-12-25 22:20

  抓取jsp网页源代码(如何应对数据匮乏的问题?最简单的方法在这里)

  作者 | 拉克夏阿罗拉

  编译|弗林

  来源|analyticsvidhya

  概述介绍

  我们的数据太少,无法构建机器学习模型。我们需要更多数据!

  如果这句话听起来很熟悉,那么您并不孤单!希望得到更多的数据来训练我们的机器学习模型是一直困扰着人们的问题。我们无法获得可以直接在数据科学项目中使用的 Excel 或 .csv 文件,对吗?

  那么,如何应对数据稀缺的问题呢?

  实现这一目标的最有效和最简单的方法之一是通过网络爬行。我个人发现网络抓取是一种非常有用的技术,可以从多个网站采集

数据。如今,一些网站还为您可能想要使用的许多不同类型的数据提供 API,例如推文或 LinkedIn 帖子。

  

  但有时您可能需要从不提供特定 API 的网站采集

数据。这是网页抓取功能派上用场的地方。作为数据科学家,您可以编写一个简单的 Python 脚本并提取所需的数据。

  因此,在本文中,我们将学习网页抓取的不同组件,然后直接学习 Python 以了解如何使用流行且高效的 BeautifulSoup 库进行网页抓取。

  我们还为本文创建了一个免费课程:

  请注意,网络抓取受许多准则和规则的约束。并非每个网站都允许用户抓取内容,因此存在一定的法律限制。在尝试执行此操作之前,请确保您已阅读该网站的网站条款和条件。

  内容

  3 个流行的 Python 网络爬虫工具和库

  网络爬虫组件

  CrawlParse 和 TransformStore

  从网页中抓取 URL 和电子邮件 ID

  抓取图片

  页面加载时抓取数据

  3 个流行的 Python 网络爬虫工具和库

  您将在 Python 中遇到多个用于网页抓取的库和框架。以下是三种用于高效完成任务的流行工具:

  美汤

  刮痧

  硒

  网络爬虫组件

  这是构成网络爬行的三个主要组件的极好说明:

  

  让我们详细了解这些组件。我们将使用 goibibo 网站获取酒店详细信息,例如酒店名称和每间客房的价格,以实现此目的:

  

  注意:请始终遵循目标网站的robots.txt文件,也称为机器人排除协议。这可以告诉网络机器人不抓取哪些页面。

  

  因此,我们可以从目标 URL 中抓取数据。我们很高兴编写我们的网络机器人脚本。开始吧!

  第 1 步:爬网

  网页抓取的第一步是导航到目标网站并下载网页的源代码。我们将使用请求库来做到这一点。http.client 和 urlib2 是另外两个用于发出请求和下载源代码的库。

  下载网页源代码后,我们需要过滤需要的内容:

  """

Web Scraping - Beautiful Soup

"""

# importing required libraries

import requests

from bs4 import BeautifulSoup

import pandas as pd

# target URL to scrap

url = "https://www.goibibo.com/hotels/hotels-in-shimla-ct/"

# headers

headers = {

\'User-Agent\': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"

}

# send request to download the data

response = requests.request("GET", url, headers=headers)

# parse the downloaded data

data = BeautifulSoup(response.text, \'html.parser\')

print(data)

  第 2 步:解析和转换

  网络抓取的下一步是将此数据解析为 HTML 解析器。为此,我们将使用 BeautifulSoup 库。现在,如果您注意到我们的登录页面,就像大多数页面一样,特定酒店的详细信息位于不同的卡片上。

  因此,下一步将是从完整的源代码中过滤卡片数据。接下来,我们将选择卡片,然后单击“检查元素”选项以获取该特定卡片的源代码。您将获得以下信息:

  

  所有卡片的类名都是一样的。我们可以通过传递标签名称和属性(例如标签)来获取这些卡片的列表。名称如下:

  # find all the sections with specifiedd class name

cards_data = data.find_all(\'div\', attrs={\'class\', \'width100 fl htlListSeo hotel-tile-srp-container hotel-tile-srp-container-template new-htl-design-tile-main-block\'})

# total number of cards

print(\'Total Number of Cards Found : \', len(cards_data))

# source code of hotel cards

for card in cards_data:

print(card)

  

  我们从网页的完整源代码中过滤掉了卡片数据,这里的每张卡片都收录

有关单个酒店的信息。仅选择酒店名称,执行“检查元素”步骤,并对房价执行相同操作:

  

  现在,对于每张卡,我们必须找到上面的酒店名称,这些名称只能来自

  从标签中提取。这是因为每张卡和费率只有一个标签、标签和类别名称:

  # extract the hotel name and price per room

for card in cards_data:

# get the hotel name

hotel_name = card.find(\'p\')

# get the room price

room_price = card.find(\'li\', attrs={\'class\': \'htl-tile-discount-prc\'})

print(hotel_name.text, room_price.text)

  

  第 3 步:Store(存储数据)

  最后一步是将提取的数据存储在 CSV 文件中。在这里,对于每张卡片,我们将提取酒店名称和价格并将其存储在 Python 字典中。然后,我们最终将其添加到列表中。

  接下来,让我们继续将此列表转换为 Pandas 数据框,因为它允许我们将数据框转换为 CSV 或 JSON 文件:

  # create a list to store the data

scraped_data = []

for card in cards_data:

# initialize the dictionary

card_details = {}

# get the hotel name

hotel_name = card.find(\'p\')

# get the room price

room_price = card.find(\'li\', attrs={\'class\': \'htl-tile-discount-prc\'})

# add data to the dictionary

card_details[\'hotel_name\'] = hotel_name.text

card_details[\'room_price\'] = room_price.text

# append the scraped data to the list

scraped_data.append(card_details)

# create a data frame from the list of dictionaries

dataFrame = pd.DataFrame.from_dict(scraped_data)

# save the scraped data as CSV file

dataFrame.to_csv(\'hotels_data.csv\', index=False)

  

  恭喜!我们已经成功创建了一个基本的网络爬虫。我希望您尝试这些步骤并尝试获取更多数据,例如酒店的类别和地址。现在,让我们看看如何在页面加载时执行一些常见任务,例如抓取 URL、电子邮件 ID、图像和抓取数据。

  从网页中获取 URL 和电子邮件 ID

  我们尝试使用网络抓取来抓取的两个最常见的功能是网站 URL 和电子邮件 ID。我相信你参与过一个需要大量电子邮件 ID 提取的项目或挑战。那么,让我们看看如何在 Python 中抓取这些内容。

  使用网络浏览器的控制台

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线