首页 > 编程语言 >Python爬虫快速入门(Requests+BeautifulSoup+Scrapy)

Python爬虫快速入门(Requests+BeautifulSoup+Scrapy)

时间:2024-10-13 12:50:47浏览次数:8  
标签:Python py Scrapy BeautifulSoup scrapy requests 爬虫 数据 example


目录

1. 为什么需要爬虫

2. 爬虫的方法

2.1 Requests

2.2 BeautifulSoup

2.3 Scrapy

3. 爬虫的注意事项


1. 为什么需要爬虫

        爬虫是重要的数据获取方式,理论上任何网上公开可视的数据都是可以获取到的。在学术研究等场合中除了使用直接的数据集以及各种搜索引擎提供的API外,就是需要自己上网爬虫,因此掌握合理的爬虫方法非常重要,下面主要介绍3种常用的Python爬虫库,教你轻松入门爬虫技术。

2. 怎么进行爬虫

2.1 Requests

        学过《计算机网络》的都知道浏览器通过给服务器发报文的方式获得网页内容,因此自然地,我们也可以假装浏览器向服务器发送请求(request)获得数据,下面是一个简单的例子:

import requests

# 发送 GET 请求
url = 'https://example.com'  # 目标主页的URL
response = requests.get(url)

# 检查请求是否成功
if response.status_code == 200:
    print("请求成功")
    print(response.text)  # 输出网页内容
else:
    print(f"请求失败,状态码:{response.status_code}")

        requests.get()应该是我们使用requests库进行爬虫中用的最多的方法了,“200”是代表成功响应的状态码,其他常见的还有“404”:文件不存在,“502”:服务器错误,“304”:本地缓存的资源未改变,可以直接用本地的资源,"301":已经永久地换成新的URL,请使用新的URL进行请求。另外为了装地更像浏览器一点避免被识别出来,我们还可以在最前面加上请求头(headers)

headers = {'User-Agent': 'Mozilla/5.0'}

2.2 BeautifulSoup

        使用requests库抓取了数据后,我们可以用beautifulsoup库进行解析,通常我们是从HTML、XML和JSON格式的文档中解析数据,这里最重要的就是找到我们想要的数据对应的标签。例如在下面这个HTML中我们想获得所有的项目名称,根据文档特点我们采用find_all函数找所有标签为<li>的数据项。

from bs4 import BeautifulSoup

# 示例 HTML
html_doc = """
<html>
<head>
    <title>Self Page</title>
</head>
<body>
    <h1>Welcome to My page</h1>
    <h2>My Projects</h2>
            <ul>
                <li><a href="#">Project1</a></li>
                <li><a href="#">Project2</a></li>
                <li><a href="#">Project3</a></li>
            </ul>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'lxml')
projects = soup.find_all('li')
for project in paragraphs:
    print(project.text)
# 输出:
# project1
# project2
# project3

2.3 Scrapy

        虽然requests已经是一个非常流行的python库了,但是它只适合页面级爬虫且性能有限,因此这里进一步介绍下Scrapy框架,它可以用于网站级别的爬虫,适用的数据尺寸更大。Scrapy的结构如下图所示较为复杂,但是由于很多都是封装好的,我们不用管,感兴趣地可以深入了解下,这里主要介绍下创建项目的实战方法。

        首先在命令行输入以下命令进行下载安装 :

pip install scrapy 

         打开pycharm,新建一个项目Settings-New Project,定义项目名称(例如ScrapyDemo),打开终端terminal,进入项目的根目录,输入:

scrapy startproject MyScrapyProject
#<项目名称为MyScrapyProject>

        创建好后接着在终端输入: 

cd MyScrapyProject
#scrapy genspider <爬虫名称> <目标网站域名>
#例如
scrapy genspider example example.com

         这会在 spiders 文件夹中生成一个名为 example.py 的爬虫文件,这也是爬虫的核心代码文件,接下来的爬取逻辑主要在这个文件中的parse函数中实现。

#example.py文件
import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/']


    def parse(self, response):
        pass

        总体项目结构:

项目名字(NewProject:ScrapyDemo)
    项目的名字(MyScrapyProject)
        spiders文件夹(存储的是爬虫文件)
            _init_.py
            自定义的爬虫文件(example.py)        核心功能文件
        _init_.py
        items.py           定义数据结构的地方 爬虫的数据都包含哪些
        middlewares        中间件 代理
        pipelines.py       管道  用来处理下载的数据
        settings           配置文件 robots协议 ua定义等

        如果想要进行小的尝试,看看自己有没有成功实现scrapy的功能,可以参考这篇博客爬虫---scrapy爬虫框架(详细+实战)-CSDN博客的第四部分项目实战,它简单地实现了一个对当当网站图书的名称+价格+图片的爬取,步骤讲的也很详细,我自己试了下是没问题的。唯二需要注意的是(1)创建爬虫项目时不需要进入spiders文件夹下,直接cd scrapy_dangdang就好了,pycharm也会给你提示的(2)它的代码爬取的是前100页的图书数据,一页大概有60本左右,爬取时间较长,如果只是尝试的话可以改小点dang.py的page变量大小,如果成功得到book.json数据就没什么问题了。

3. 爬虫的注意事项

        爬虫一直还是一个具有争议性的行为,因此做的时候最重要的还是要合法合规。对于数据内容,首先网站明令禁止爬取的数据我们就不要碰了,牵扯到用户隐私的数据也要慎重爬取;对于爬取过程,尽量不要选择一些高峰期频繁发送请求,把本来就快无法满足正常用户需求的服务器搞瘫痪;对于数据用途,做一些简单有益的学术研究、数据分析是可以的,但是不能恶意攻击,侵犯隐私或是窃取对手公司的商业机密造成不正当竞争。

        这里再介绍一个非常著名的Robots.txt协议文件,它是搜索引擎中访问网站的时候要查看的第一个文件,上面规定了哪些内容是不被允许爬取的,爬虫时应严格遵守该协议,通过查询下面的网址即可查看目标网站的robots协议。

#example.com需要被替换成目标网址
https://www.example.com/robots.txt

        以上就是全部内容了,讲的比较粗略只是个简单介绍,如果对友友们有帮助,希望多多关注点赞。如有不足,也非常欢迎批评指正,共同进步。后续可能考虑做一些实战项目以及针对requests和scrapy无法处理JS渲染的动态网页问题再介绍下Selenium以及Scrapy+Splash方法。


参考资料:

爬虫---scrapy爬虫框架(详细+实战)-CSDN博客

Python网络爬虫与信息提取 北京理工大学:嵩天_哔哩哔哩_bilibili

标签:Python,py,Scrapy,BeautifulSoup,scrapy,requests,爬虫,数据,example
From: https://blog.csdn.net/weixin_72032564/article/details/142883737

相关文章

  • 【Python库安装】Python环境安装GDAL库
    Python环境安装GDAL库1GDAL介绍GDAL的应用python安装GDAL库Python版本查看与切换方法1:pip直接安装另:下载.whl文件安装报错-Python安装库文件isnotasupportedwheelonthisplatform的解决方案方法2:离线安装,使用whl文件安装方法3:使用conda安装wrf-python:参考......
  • Python与深度学习库PyTorch进阶
    Python与深度学习库PyTorch进阶从零开始:PyTorch环境搭建与第一个神经网络安装PyTorch第一个神经网络玩转张量:掌握PyTorch核心——Tensor操作全解析创建张量张量运算自动求导模型构建的艺术:自定义神经网络层与模块自定义层自定义模块训练秘籍:优化器、损失函数与训练循......
  • python量化数据6:计算宁德时代macd金叉死叉红柱绿柱大小
    一、通达信公式#行业业绩轮动公众号首发DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);金叉cross(diff,dea)死叉cross(dea,diff)二、代码#行业业绩轮动公众号首发#tdx_indicator是1个通达信常用函数的封装库,下载可以从我的开......
  • Python实践——实现视频.mp4转图片.jpg(可成功实现)
    代码......
  • Python从0到100(六十三):Python OpenCV-入门基础知识
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Springboot在线学习辅导管理系统--49101(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线学习辅导管理系统等问题,对在线学习辅导管理系统进行研究分析,然后开发设计出在线学习辅......
  • Springboot一个小说阅读APP的设计与实现--48151(免费领源码)可做计算机毕业设计JAVA、PH
    摘 要大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在小说在线阅读的需求下,开发一款小说阅读APP,将复杂的系统进行拆分,能够实现对需求的变化快速响应、系统稳定性的保障,能保......
  • 基于SaaS的小区物业管理系统设计与实现--47357(免费领源码)可做计算机毕业设计JAVA、PHP
    摘 要本论文主要论述了如何使用SpringBoot开发一个基于SaaS的小区物业管理系统小程序,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述小区物业管理系统小程序的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程......
  • 利用Vue3的axios+Python的flask实现前后端交互功能
    1功能实现1.1功能在网页中输入两个数字后,点击计算按钮在线计算(注意不是在浏览器端)获得两数之和。1.2思路前端使用vue3的axios向服务器发送post请求,利用flask框架使python服务器返回计算后的数值,赋给前端的变量,最终在浏览器上显示。2前端部分:2.1html<div><inputv-mod......
  • python: create object
     classAccount(object):"""账户"""owner:str#类型提示"""类型提示"""balnace:float#类型提示"""类型提示"""def__init__......