使用python 爬虫抓站的一些技巧总结

使用Python爬虫抓站的一些技巧总结

Python作为一种非常流行的编程语言,被广泛地应用于各个领域,其中爬虫技术在大数据、人工智能等领域中扮演着重要的角色。但是爬虫技术也有一些技巧和注意点需要掌握,本文将会对使用Python爬虫抓站的一些技巧进行总结。

一. 常见的爬虫框架

  1. Scrapy:Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。同时也可以用于数据挖掘和信息处理,并可以应用在广泛的领域中,例如数据挖掘,信息处理或存储历史数据等。因此,Scrapy 使用广泛,为用户提供了高效的Web爬取规划和即时数据提取的机制。
  2. Beautiful Soup:Beautiful Soup是一个使用Python进行网页解析的库。它可以将 HTML 和 XML 文件转化为解析树,通过遍历这个树来提取出所需要的信息。

二、编写爬虫的基本思路

  • 分析网站结构,确定所需的数据;
  • 通过网络请求爬取页面上的数据;
  • 使用合适的库对数据进行解析、存储等操作;
  • 对数据进行清洗和分析。

三、避免反爬机制

  • 设置请求头:一般情况下,服务器会通过请求头来识别请求的来源。所以可以通过设置请求头中的User-Agent等参数来伪装成浏览器请求数据,从而避免被识别为爬虫程序。
  • 降低爬取频率:如果请求的频率过高,一方面容易影响服务器的正常运行,另一方面也容易被服务器检测到是非正常请求。
  • 使用代理IP:使用代理IP能够避免同一IP请求过于频繁,使得服务端不能正常运行从而封禁该IP的现象。在Python中可以使用requests库中的proxies参数来设置代理IP。
  • 使用验证码自动识别技术:有些网站设置了验证码等反爬机制。为了避免这种情况,可以使用第三方的验证码识别服务来自动识别并输入验证码。

四、示例说明

示例1:使用requests+Beautiful Soup 对简书的文章进行爬取

1. 分析网站结构,确定所需的数据

我们需要爬取简书网站上的文章,因此我们需要去简书网站浏览页面,确定所需数据的网页元素位置和访问地址。

2. 通过网络请求爬取页面上的数据

在Python中我们可以使用 requests 库来完成网站数据的请求和响应,如下:

import requests

# 获取简书博客页面的HTML代码
url = "https://www.jianshu.com"
r = requests.get(url)
content = r.content.decode('utf-8')

3. 使用Beautiful Soup 对数据进行解析

通过Beautiful Soup库可以非常方便地解析网页中的HTML和XML代码,并且可以根据需要进行数据的提取和操作,如下:

from bs4 import BeautifulSoup

# 解析简书博客页面的HTML代码
soup = BeautifulSoup(content, "html.parser")
# 找到所有文章标题元素
titles = soup.find_all('a', {'class': 'title'})
# 输出文章标题
for title in titles:
    print(title.string)

4. 对数据进行清洗和分析

对于爬取到的数据,如果不进行清洗和分析,很难达到我们预期的效果。例如对于获取到的文章内容,我们需要去除其中的HTML标签和空格等无用信息,只保留正文内容,可以通过如下方式进行清洗:

# 处理文章内容
for title in titles:
    # 获取文章链接
    link = "https://www.jianshu.com" + title.get("href")
    text_r=requests.get(link)
    # 解析网页 HTML 代码
    soup_text = BeautifulSoup(text_r.content, 'html.parser')
    # 获取文章内容
    article_text = soup_text.find('div', {'class': 'show-content-free'}).get_text()
    # 处理文章内容,去除无用字符
    article_text = article_text.replace('\n', '').replace(' ', '')
    # 输出文章内容
    print(article_text)

示例2:使用 Scrapy 对京东商品进行爬取

1. 分析网站结构,确定所需的数据

我们需要爬取京东网站上的商品,因此我们需要去京东网站浏览页面,确定我们需要爬取的商品的网页元素位置和访问地址。

2. 使用 Scrapy 爬取京东商品

按照 Scrapy 爬虫的通用流程,我们将会新建一个 Scrapy 项目进行爬取:

# 1. 创建 Scrapy 项目
scrapy startproject jd

# 2. 创建爬虫类
cd jd
scrapy genspider jdbook book.jd.com

添加如下代码到京东 book.jd.com 上:

# 获取书籍列表
def parse(self, response):
    # 遍历获取书籍标题、价格
    for sel in response.xpath('//ul[@class="gl-warp clearfix"]/li'):
        # 获取书籍标题和价格
        title = sel.xpath('div/div/a/em/text()').extract()[0]
        price = sel.xpath('div/div/strong/i/text()').extract()[0]
        # 输出数据
        print(title, price)

3. 对数据进行清洗和分析

对于爬取到的商品,我们可以通过 Scrapy 爬虫框架提供的特性对数据进行清洗和分析。例如可以将数据存储到数据库中、去重复等操作。这里我们将数据存储到csv文件中:

class JdbookSpider(scrapy.Spider):
    def __init__(self, name=None, **kwargs):
        super().__init__(name, **kwargs)
        self.page = 1

    # 书籍列表页
    def start_requests(self):
        url = "https://list.jd.com/list.html?cat=1713,3258,3305&page=%s"
        urls = [url % i for i in range(1, 2)]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    # 获取书籍列表
    def parse(self, response):
        # 遍历获取书籍标题、价格
        for sel in response.xpath('//ul[@class="gl-warp clearfix"]/li'):
            # 获取书籍标题和价格
            title = sel.xpath('div/div/a/em/text()').extract()[0]
            price = sel.xpath('div/div/strong/i/text()').extract()[0]

            # 保存数据到csv
            with open('goods.csv', 'a', newline='') as file:
                writer = csv.writer(file)
                writer.writerow([title, price])
            # 输出数据
            print(title, price)

以上是对Scrapy爬虫框架进行简单的应用和说明, Scrapy 还有更丰富的特性和丰富的扩展,能够帮助我们更加轻松地完成爬虫任务。

五、总结

本文介绍了使用Python进行爬虫开发时常见的技巧和注意点。在实际使用中,我们应该根据不同的场景和数据需求选择合适的爬虫框架、合适的爬虫方法。如果存在反爬机制,我们可以通过一些技巧进行绕过;同时也需要注意爬取频率等细节问题。在进行数据清洗和分析时,应该根据具体需求选择适当的方式进行,不可盲目使用,否则会浪费大量时间和资源。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python 爬虫抓站的一些技巧总结 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • python中必会的四大高级数据类型(字符,元组,列表,字典)

    下面是Python中四大高级数据类型的详细讲解。 字符 在Python中,字符串是一种不可变的序列,用单引号或双引号表示。字符串有很多的内置方法,可以对字符串进行各种操作,例如切片、拼接、替换等等。 示例1:字符串拼接 我们可以使用+号来连接两个字符串,也可以使用*号来复制字符串。 str1 = "Hello" str2 = "…

    python 2023年5月13日
    00
  • Python基础之time库详解

    Python基础之time库详解 1. time库简介 time库是Python标准库之一,主要用于处理时间相关的功能。在使用time库之前,需要先引入该库,引入方式为: import time 2. time库常用函数 2.1 time() time()函数用于获取当前时间戳,返回从1970年1月1日零时零分零秒(UTC/GMT的午夜)到现在所经过的秒数。…

    python 2023年5月19日
    00
  • Python3 导入上级目录中的模块实例

    下面为您详细讲解“Python3 导入上级目录中的模块实例”的完整攻略。 在Python中,想要从上级目录中导入模块实例,通常有以下几种方式: 方式一:使用sys.path.append() 在导入模块时,Python会按照一定的顺序搜索模块。其中,sys.path变量包含了Python搜索模块时所查找的路径。可以通过修改sys.path变量来实现从上级目录…

    python 2023年6月3日
    00
  • 用于 python 的 Kubernetes OpenShift

    【问题标题】:Kubernetes OpenShift for python用于 python 的 Kubernetes OpenShift 【发布时间】:2023-04-04 10:36:01 【问题描述】: 我是 openshift 的新手,我们正在尝试在一个 pod 中部署一个 python 模块,该模块可由运行在不同 pod 中的其他 python …

    Python开发 2023年4月6日
    00
  • Python 统计数据集标签的类别及数目操作

    为了统计 Python 数据集中标签的类别及数目,我们需要进行以下步骤: 步骤一:读取数据 要统计数据集中标签的类别及数目,我们需要先读取数据,使用Python的pandas库可以实现快速读取数据集。 import pandas as pd data = pd.read_csv("data.csv") 上述代码将读取名为 “data.cs…

    python 2023年6月3日
    00
  • python 实现以相同规律打乱多组数据

    要实现以相同规律打乱多组数据,可以通过随机数种子来实现。具体步骤如下: 导入 random 库 首先需要导入 Python 的 random 库,该库包含各种随机数生成函数。 import random 设置随机数种子 在开始生成随机数之前,需要设置随机数种子。可以选择为所有数据设置一个相同随机数种子,这样可以保证打乱的顺序是相同的,例如: random.s…

    python 2023年6月3日
    00
  • python中函数的参数详解

    Python中函数的参数详解 在Python中,函数的参数通常分为位置参数和关键字参数两种类型。这篇文章将对Python中函数的参数做详细的介绍,并提供一些常用的技巧。 位置参数 位置参数是指在函数调用中,根据形参的顺序,一个一个传入实参的方式。例如: def greet(name, age): print("Hello, my name is&q…

    python 2023年6月5日
    00
  • Python编写可视化界面的全过程(Python+PyCharm+PyQt)

    下面是Python编写可视化界面的全过程攻略: 1. 安装相关软件 首先需要安装Python、PyCharm、PyQt5软件,建议使用最新版。如果你还没有安装过,可以到官网上下载对应的版本进行安装。 2. 创建PyCharm项目 打开PyCharm,点击“Create New Project”按钮,在弹出的窗口中选择Python版本,并输入项目名称和存放目录…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部