前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你说:公主请学点爬虫吧!

你说:公主请学点爬虫吧!

原创
作者头像
逍遥子大表哥
发布2023-12-01 09:13:18
3130
发布2023-12-01 09:13:18
举报
文章被收录于专栏:kali blog

在大数据时代,数据的处理已成为很关键的问题。如何在茫茫数字的海洋中找到自己所需的数据呢?不妨试试爬虫吧!

本文,我们从最基本的 python 爬虫入门。谈谈小白如何入门!

前期条件

既然我们需要 python 来爬虫,这需要在我们的本地搭建 python 环境。python 环境搭建很简单。如下:

😘windows11

win11中,我们只需在cmd命令中输入python在应用商店中,直接点击获取即可。

🐯Windows 其他系统

对于其他系统,我们只需要到官网下载安装包,进行安装即可。

安装完成,在 cmd 命令中输入python能显示相应的 python 版本就行了。

🐻‍❄️Linux

在 Linux 中,我们只需执行下面命令

代码语言:javascript
复制
# 更新源
apt-get update
# 安装
apt-get install python3.8
# 查看
python -V

常用依赖模块

python 是不能直接爬虫的。我们需要借助各种依赖环境。现对常用的依赖环境简单的说明:

requests

requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。它的安装也很简单,执行下面命令进行安装

代码语言:javascript
复制
pip install requests

使用示例:

代码语言:javascript
复制
# 导入 requests 包
import requests
# 发送请求
x = requests.get('https://blog.bbskali.cn')
# 返回网页内容
print(x.text)

beautifulsoup4

和前者一样,利用beautifulsoup4库也能很好的解析 html 中的内容。

代码语言:javascript
复制
# 安装
pip install beautifulsoup4

小试牛刀

这里,我们以Quotes to Scrape这个简单的网站为例。

我们可以看到,当前页面主要有标题 作者 标签等信息。现在我们对当前的页面进行分析。

在当前页面中,我们可以看到 css 的结构如下;

代码语言:javascript
复制
<div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork">
        <span class="text" itemprop="text">“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”</span>
        <span>by <small class="author" itemprop="author">Albert Einstein</small>
        <a href="/author/Albert-Einstein">(about)</a>
        </span>
        <div class="tags">
            Tags:
            <meta class="keywords" itemprop="keywords" content="change,deep-thoughts,thinking,world">
            <a class="tag" href="/tag/change/page/1/">change</a>
        </div>
    </div>

我们只需关键字段的 css 就行了。 您可以从图上看到, quote

HTML HTML 元素由 quote/引用类标识。这包含:

  • <span> HTML 元素中的引用文本
  • <small> HTML 元素中的引用作者
  • <div> 元素中的标签列表,每个标签都包含 <a> HTML 元素中

现在我们来学习如何使用 Python 的 Beautiful Soup 实现这一目标。

代码语言:javascript
复制
soup = BeautifulSoup(page.text, 'html.parser')

接下来,利用find_all() 方法将返回由 quote 类标识的所有<div> HTML 元素的列表。

代码语言:javascript
复制
quote_elements = soup.find_all('div', class_='quote')

最后完整代码如下:

代码语言:javascript
复制
#导入第三方库
import requests
from bs4 import BeautifulSoup
import csv

def scrape_page(soup, quotes):
    # 查找当前页面中所有class="quote"的div
    quote_elements = soup.find_all('div', class_='quote')
    # 通过for循环 遍历quote_elements下的标题 作者 标签等信息。
    for quote_element in quote_elements:
        # 遍历标题
        text = quote_element.find('span', class_='text').text
        # 遍历作者
        author = quote_element.find('small', class_='author').text

        # 遍历标签
        tag_elements = quote_element.find('div', class_='tags').find_all('a', class_='tag')
        #由于标签不止一个,所以将其放到数组中。
        tags = []
        for tag_element in tag_elements:
            tags.append(tag_element.text)

        quotes.append(
            {
                'text': text,
                'author': author,
                'tags': ', '.join(tags)
            }
        )

# 设置目标域名
base_url = 'https://quotes.toscrape.com'

# 设置浏览器信息,让系统认为我们的请求是浏览器的正常请求。
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

#使用requests来下载网页,并将数据赋值给page
page = requests.get(base_url, headers=headers)
#将上级page的数据递交给 BeautifulSoup函数。
soup = BeautifulSoup(page.text, 'html.parser')
# 初始化一个包含了所有抓取的数据列表的变量
quotes = []
scrape_page(soup, quotes)
# 抓取下一页内容
next_li_element = soup.find('li', class_='next')
while next_li_element is not None:
    next_page_relative_url = next_li_element.find('a', href=True)['href']
    page = requests.get(base_url + next_page_relative_url, headers=headers)
    soup = BeautifulSoup(page.text, 'html.parser')
    scrape_page(soup, quotes)

    next_li_element = soup.find('li', class_='next')
    #将结果保存为csv文件
csv_file = open('quotes.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(csv_file)
writer.writerow(['Text', 'Author', 'Tags'])

for quote in quotes:
    writer.writerow(quote.values())
csv_file.close()

效果展示

将上面的文件保存为py文件。然后执行

代码语言:javascript
复制
python xx.py

能力提升

在上述中,我们讲解了利用 python 实现简单的爬虫。但是在实际中很多站点都会有反爬虫机制。主要体现在以下几个方面。

  • 限制 IP 的访问次数
  • 复杂页面爬虫,对代码要求比较高。
  • 对大型爬虫项目,数据的后期处理比较麻烦

在此,表哥为大家推荐一款数据处理和爬虫很牛叉的平台Bright Data 我们到官网首先注册,官网地址:https://get.brightdata.com/wxdtkgpzhtj8 注册后效果如下:

登录后,可以看到主要有两部分代理爬虫基础设施 和 数据集 和 Web Scraper IDE

代理&爬虫基础设施

通过真实的代理 IP 来爬虫,从而避免 IP 地址的限制。

想用那种代理启动那个就行了
想用那种代理启动那个就行了

数据集 和 Web Scraper IDE

这里官方提供了已经爬好的一些知名站点的数据,我们可以直接使用。

Web Scraper IDE

在这里,官方还提供了 web 端的 ide 工具,并提供了相关的示例代码,可以直接使用!

定制数据

当然,如果上面的这些不符合你的要求,可以定制数据。 这里,我们已博客园的数据为例,如我想爬取博客园的文章标题、作者、发布时间、点赞数等信息。

然后提交后,等待抓取完成。

编辑每个字段

最后保存

设置爬取的条数,这里我设置爬了5000

提交后,等待爬取结果就行了。简单不~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前期条件
  • 常用依赖模块
  • 小试牛刀
  • 能力提升
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档