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

yizhihongxing

使用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 datetime中strptime用法详解

    Python datetime中strptime用法详解 在Python中,有一个datetime模块可以处理日期和时间。其中,strptime函数可以帮助我们将字符串转换为datetime格式,适用于将字符串日期转化为datetime格式日期。本篇攻略将介绍Python datetime中的strptime函数的用法以及相关注意事项。 strptime函数…

    python 2023年6月2日
    00
  • Pandas sample随机抽样的实现

    下面我为您详细讲解“Pandas sample随机抽样的实现”的完整攻略。 什么是Pandas sample随机抽样? 在数据分析领域,经常需要对数据集进行抽样分析,Pandas作为数据分析库,提供了sample方法来实现对数据集的抽样操作。Pandas sample方法可以从DataFrame中获取指定样本数量的数据,同时也支持获取指定比例的数据。 sam…

    python 2023年6月3日
    00
  • Python按行读取文件的简单实现方法

    下面是Python按行读取文件的简单实现方法的完整攻略。 1. 背景 在Python中,我们经常需要从文件中读取数据。对于小型文件,我们可以将整个文件读入内存,然后进行操作。然而对于大型文件,比如几个G的日志文件,一次性读取可能会导致内存溢出,降低程序的性能。这时,我们需要按行读取文件,在每次读取一行后就进行相应的处理,以避免将整个文件读入内存。 2. 实现…

    python 2023年5月19日
    00
  • python字典翻转的实现

    Python中的字典是一种集合数据类型,用{}包围,由key-value键值对组成。字典可以通过key来访问对应的value, 但是很难通过value来访问对应的key。因此,如果需要倒置字典中的key-value键值对,就需要进行字典翻转。下面是Python字典翻转的实现攻略: 方法一:使用dictionary comprehension(字典推导) 在P…

    python 2023年6月3日
    00
  • Python3.7安装PyQt5 运行配置Pycharm的详细教程

    下面是安装PyQt5并配置PyCharm的详细步骤: 1. 安装Python3.7 首先,你需要在你的电脑上安装Python3.7。你可以在Python官网(https://www.python.org/downloads/)下载最新的Python3.7版本的安装程序,并按照提示进行安装。 2. 利用pip安装PyQt5 在安装完Python3.7后,你需要…

    python 2023年5月18日
    00
  • Python如何实现机器人聊天

    下面是Python如何实现机器人聊天的完整攻略: 1.选择合适的机器人框架 目前在Python中有很多机器人框架可供选择,比较流行的有ChatterBot、BotStar、Rasa等。根据项目需求选择合适的机器人框架是很重要的。比如ChatterBot适用于构建基于文本的对话系统,Rasa适用于构建先进的交互式机器人等等,不同的框架使用方法和实现也各有不同,…

    python 2023年5月23日
    00
  • Python SVM(支持向量机)实现方法完整示例

    Python SVM(支持向量机)实现方法完整示例 本文介绍如何使用Python实现SVM(支持向量机)分类器。将会涵盖以下内容: SVM的基本概念 SVM的实现方法 SVM的参数调整 实现一个SVM分类器的完整示例 SVM的基本概念 SVM是一种强有力的、灵活的、可用于分类、回归和异常检测的机器学习算法。SVM基于找到一个最优的超平面来区分两个或多个类别。…

    python 2023年5月18日
    00
  • Python3.6.x中内置函数总结及讲解

    Python 3.6.x中内置函数总结及讲解 Python是一种功能强大的动态编程语言,被广泛用于Web应用程序,科学计算,数据分析和许多其他应用程序。Python内置了许多有用的函数,这些函数可以极大地简化开发过程。以下是Python 3.6.x中一些最重要的内置函数。 1. print() print() 函数用于在控制台或其他标准输出设备上打印输出。它…

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