使用 Python 的网络抓取教程:技巧和窍门

蟒蛇, 搜索, Mar-06-20245 分钟阅读

你可以使用网络搜刮技术从网站上自动提取大量数据,并将其保存到数据库或文件中。刮取的数据大多可以电子表格或表格格式存储。网络搜刮也称为网络数据提取网络采集。之所以需要这种方法,是因为手动搜索是一项乏味的工作

目录

你可以使用网络搜刮技术从网站上自动提取大量数据,并将其保存到数据库或文件中。刮取的数据大多可以电子表格或表格格式存储。网络搜刮也称为网络数据提取网络采集。之所以需要网络数据提取,是因为手动搜索是一项繁琐的工作,可能需要数小时甚至数天才能完成。因此,您需要将这一过程自动化,在极短的时间内从网站中提取数据。

您可以根据自己的需要和要求,使用网络搜刮软件自动加载、抓取和提取网站多个页面的数据。简而言之,您只需点击一下按钮,就能从网站上获取所需的数据。在现代社会,企业需要分析数据并执行智能操作。但有时,当网站所有者采用 IP 禁止和验证码等技术时,从网站获取数据就会变得很困难。您可以使用代理服务器或 VPN 来解决这个问题,因为它们可以帮助您匿名从网上抓取数据。 

为什么需要网络搜索?

世界各地的企业都会从网络上抓取数据,并将其存储为可用格式,从而获得有用的见解。下文介绍了网络搜索在各行各业的一些优点。

  • 网络搜刮可为机器学习项目收集训练和测试数据集。
  • 在电子商务中,网络搜索用于监控竞争对手的价格。
  • 网络搜索用于房地产行业,以获取房产和业主/代理的详细信息。
  • 在市场营销中,网络搜索用于建立电话和电子邮件名单,以进行冷启动。

以下是从网上搜索数据的主要原因。

实现自动化 - 您可以使用强大的网络刮擦工具从网站中提取数据。这样,您就可以从琐碎的数据收集任务中节省时间。您可以收集到的数据量之大,是单个人类无法企及的。此外,您还可以使用 Python、Javascript 等编程语言或网络刮擦工具创建复杂的网络机器人,实现在线活动的自动化。

丰富独特的数据集 - 您可以从互联网上获取丰富的图片、视频、文本和数字数据。您还可以根据自己的目标,查找相关网站并创建自定义数据集进行分析。例如,您有兴趣深入了解英国体育市场。您可以设置网络刮擦器来为您收集视频内容或足球统计信息。

有效的数据管理 - 您不需要从互联网上复制和粘贴数据,因为您可以通过网络刮擦从各种网站上准确地收集数据。这样,您的公司和员工就可以利用自动软件和程序有效地存储数据,从而将更多时间用于创造性工作。

商业智能和洞察力 - 从互联网上进行网络搜刮可以实现以下功能:

  • 监控竞争对手的营销活动
  • 搜索竞争对手的价格
  • 构建更广阔的市场图景

此外,企业还可以通过大量下载、清理和分析数据来实现更好的决策。

速度 - 网络搜索能以极快的速度从网站中提取数据。它可以让你在数小时内而不是数天内完成数据采集。但有些项目可能需要一些时间,这取决于项目的复杂程度以及我们用来完成项目的资源和工具。

数据准确性--人工从网站中提取数据会出现人为错误,导致严重问题。因此,准确的数据提取对于任何信息来说都至关重要,而这可以通过网络搜索来实现。

用 Python 进行网络抓取

假设您要从网站提取数据。您需要安装两个 Python 模块,即 requests 和 BeautifulSoup。 

导入图书馆

您可以使用以下命令安装这些模块。

!pipinstallrequests
!pipinstallBeautifulSoup

您可以导入这些模块为

bs4导入BeautifulSoup
导入请求

您可以点击网站左上角的 "检查 "按钮,突出显示您希望提取的元素。在我们的例子中,我们要提取网站的表格数据,如下图所示。

添加标题和 URL

您必须在请求中添加页眉和 URL。标头可以让你的请求看起来像是来自一个合法的浏览器。 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

您可以使用 requests.get() 函数向指定的 URL 发送 GET 请求。

r = requests.get(url,headers=headers)

美丽汤对象

您必须初始化一个 BeautifulSoup 对象并提及其参数。然后,您必须提取表中的所有行。您可以使用 find_all()方法获取所有表格元素,如下所示。

soup= BeautifulSoup(r.content,"html.parser")
table= soup.find_all('table')[1]
rows= table.find_all('tr')
row_list= list()

按行迭代

您可以使用 for 循环遍历表中的所有行,如下所示。

for tr inrows:
   td=tr.find_all('td')
    row =[i.text for i in td]行
    row_list.append(row)

创建数据帧

如果创建一个 Pandas 数据框,并将数据导出为 .csv 文件,就可以将提取的数据清晰地可视化。要创建数据帧,必须导入 Pandas,如下图所示。

importpandasaspd

现在,您可以将汤对象转换为数据帧,该数据帧将包含以下表格行。

  • 城市
  • 国家
  • 说明

您可以将数据帧转换为 csv 格式,然后打印数据帧,如下图所示。

df_bs = pd.DataFrame(row_list,columns=['City','Country','Notes'])
df_bs.set_index('Country',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
打印(df_bs)

您将得到以下输出结果。

使用 Python 进行网络抓取的代理服务器

代理充当客户端和服务器之间的中间人。它可以隐藏你的真实 IP 地址,绕过过滤和审查。只需使用 Python 中的一个函数,就能获取免费的代理列表,如下步骤所示。

导入图书馆

您必须在 Python 中导入以下模块。

bs4导入BeautifulSoup
导入请求
导入随机

定义函数

您可以定义一个 get_free_proxies()函数,其中必须提及免费代理列表的 URL。然后,您必须创建一个 BeautifulSoup 对象,并使用 requests.get() 函数获取 HTTP 响应。 

defget_free_proxies():
    url ="https://free-proxy-list.net/"
    soup =bs(requests.get(url).content,"html.parser")
    代理服务器 = []

使用 For 循环

您可以在 for 循环中使用 find_all() 方法遍历所有表行,如下所示。

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

工作代理列表

您可以提及一些有效的代理服务器列表,比如我们在下文中提到的代理服务器。

代理服务器 = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

申请会议

您必须创建一个函数 get_session(),接受代理列表。它还会创建一个请求会话,随机选择传入的代理中的任意一个,如下文代码所示。

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

提出请求

您可以使用 for 循环向网站发出请求,并得到一个 IP 地址。

for i in range(5):
    s =get_session(proxies)
    try:
       print("Request page with IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e:
        继续

输出结果如下

为什么代理对网络搜索很重要?

企业可以通过网络搜索提取有价值的数据,从而做出数据驱动的决策,并提供数据驱动的服务。代理对于网络搜索非常重要,原因如下。

  • 使用代理服务器,您可以从特定地理区域发出请求,并查看网站在该特定位置显示的特定内容。当你从在线零售商那里获取产品数据时,代理的这一功能就非常有用。
  • 通过代理,您可以向目标网站发出更多请求,而不会被阻止或禁止。
  • 通过代理,您可以更可靠、更高效地抓取网站数据。
  • 有了代理服务器,您可以无限制地同时访问相同或不同的网站,而不必担心被禁止。
  • 代理向目标网站隐藏您机器的 IP 地址,从而为您的设备提供额外的安全性。
  • 企业使用代理来监控竞争对手的价格和产品功能,以改进自己的服务和产品。

本 Python 网络抓取教程的结论

到目前为止,我们已经讨论过网络搜刮可以帮助我们以自动化的方式从网站中提取数据。您可以将数据转换为 .csv 文件等可用格式。企业使用网络搜索来检查竞争对手的价格和产品功能。如果使用代理服务器,网络搜刮将大有用武之地,因为代理服务器可以从目标网站上隐藏您的原始 IP 地址,从而保持您的匿名身份。使用代理服务器,您可以向网站发送多个请求,而不必担心被阻止或禁止。