【python数据抓取技术与实战】单机数据抓取

大数据抓取与存储:如何用Python构建高效的数据抓取系统 本文介绍了使用Python构建高效大数据抓取系统的关键技术。主要内容包括:大数据抓取面临的挑战(数据量大、频率高、分布式需求等);常用抓取框架(Scrapy、Selenium、BeautifulSoup+Requests)的选择与使用;不同类型的数据存储方案(关系型数据库、NoSQL、分布式文件系统);系统架构设计(单机与分布式爬虫);以及性能优化方法(异步并发、限速重试、负载均衡等)。文章为构建稳定高效的大数据抓取系统提供了全面的技术指导。 阅读详情

1、单机顺序抓取

这里使用的是Spynner库进行单进程抓取,通常用于目标明确及抓取内容数量不是很大的情况。加之我们用的python3,安装过程也复杂,所以我们就不必在这部分花时间了。但在这里,我们做一个简单的介绍。

优点:Spynner基于pyqt库,pyqt封装了强大的webkit,具有执行JavaScript的能力,可以完全模拟一个浏览器的功能和行为。

import spynner                                           #引入模块
browser=spynner.Browser()                                #生成一个“浏览器”
browser.show()                                           #显示“浏览器”
browser.load('http://www.phei.com.cn')                   #加载网页
browser.wait(10)                                         #等待10秒,为了使“浏览器”多停留一会,以便观察
browser.close()                                          #关闭“浏览器”,彻底释放资源

2、requests

requests库,它是python的http库,可以完成绝大部分与http应用相关的工作。与spynner不同的是,requests是一种非界面化的库,不能模拟浏览器的全部行为,常用的两种方法为:get和post。

get方法在爬虫基础那一讲,我们已经知道了它的部分使用方法。我们来一起看一下代码:

import requests
#形式一
resp1=requests.get('http://www.phei.com.cn/')

#形式二
params_dict ={
    'key1':'value1',
    'key2':'value2'
}
resp2=requests.get('http://httpbin.org/get',params=params_dict)
print(resp2.json())

post方法,比get方法的形式更复杂一些。get方式提交的数据最多只能是1024字节,post是没有大小限制的。

还是先来看看代码:

import requests
post_data ={
    'user':'uname',
    'upass':'upassword'
}
resp3=requests.post('http://httpbin.org/get',data=post_data)
print(resp3.json())

header和cookie

header可以将我们的get和post伪装成浏览器,因为在抓取时对方的可能会判断请求方是否是浏览器,如果为浏览器才响应,返回数据。cookie中常常包含浏览器信息和用户信息,某些网站就是通过cookie信息来判断用户的。

3、并发和并行

主要技术包括:多线程、多进程、携程gevent。下面我们就进入正题:

为了更好的运用技术,我们先解释以下概念

  • 并发,在一个时间段内发生若干事件的情况。就像单核的CPU,多任务操作系统的各个任务是并发运行的,各个任务会以分时的方式在一段时间内分别占用CPU依次执行,如果在自己的时间段里没有完成,那么需等待下一次得到CPU的使用权才会继续。
  • 并行,同一时刻发生若干时间的情况。就像多核的CPU,多个任务可能在多个核上同时运行。
  • 同步,并发或并行发生的各个任务之间不是孤立独自运行的,一个任务的进行可能需要在获得另一个任务给出的结果之后。各任务的运行会彼此相互制约。
  • 异步,并发或并行发生的各个任务之间彼此是独立运行的,不受各自的影响。

实验爬取计算机类的图书名和链接,单线程、多线程、多进程、协程的时间比较,代码如下:

import requests
from bs4 import BeautifulSoup
import threading              #线程
import multiprocessing        #进程
import gevent                 #协程
from gevent import monkey     #协程中需导入的包
monkey.patch_all()            #协程没有这两句,会变成依顺序抓取
import time

def format_str(s):
    return s.replace('\n','').replace(' ','').replace('\t','')

def get_urls_in_pages(from_page_num,to_page_num):
    urls=[]
    search_word='计算机'
    url_part_1='http://www.phei.com.cn/module/goods/searchkey.jsp?Page='
    url_part_2='&Page=2&searchKey='
    for i in range(from_page_num,to_page_num+1):
        urls.append(url_part_1+str(i)+url_part_2+search_word)
    all_herf_list=[]
    for url in urls:
        #print(url)
        resp=requests.get(url).text
        bs=BeautifulSoup(resp,'lxml')
        a_list=bs.find_all('a')
        needed_list=[]
        for a in a_list:
            if 'href' in a.attrs:
                href_val=a['href']
                title=a.text
                if 'bookid' in href_val and 'shopcar0.jsp' not in href_val and title !='':
                    if [title,href_val] not in needed_list:
                        needed_list.append([format_str(title),format_str(href_val)])
        all_herf_list+=needed_list
    all_herf_file=open(str(from_page_num)+'_'+str(to_page_num)+'_'+'all_hrefs.txt','w')
    for href in all_herf_list:
        all_herf_file.write('\t'.join(href)+'\n')
    all_herf_file.close()
    #print(from_page_num,to_page_num,len(all_herf_list))

def single_threads_test():
    t1=time.time()
    get_urls_in_pages(1,40)
    t2=time.time()
    print('单线程使用时间:',t2-t1)

def multiple_threads_test():
    t1=time.time()
    page_range_lst=[(1,10),(11,20),(21,30),(31,40)]
    th_lst=[]
    for page_range in page_range_lst:
        th=threading.Thread(target=get_urls_in_pages,args=(page_range[0],page_range[1]))
        th_lst.append(th)
    for th in th_lst:
        th.start()
    for th in th_lst:
        th.join()
    t2=time.time()
    print('多线程使用时间:',t2-t1)

def multiple_process_test():
    t1=time.time()
    page_range_lst=[(1,10),(11,20),(21,30),(31,40)]
    pool=multiprocessing.Pool(processes=4)
    for page_range in page_range_lst:
        pool.apply_async(get_urls_in_pages,page_range[0],page_range[1])
    pool.close()
    pool.join()
    t2=time.time()
    print('多进程使用时间:', t2 - t1)

def gevent_test():
    t1=time.time()
    page_range_lst = [(1, 10), (11, 20), (21, 30), (31, 40)]
    jobs=[]
    for page_range in page_range_lst:
        jobs.append(gevent.spawn(get_urls_in_pages,page_range[0],page_range[1]))
    gevent.joinall(jobs)
    t2=time.time()
    print('协程使用时间:', t2 - t1)

if __name__=='__main__':
    single_threads_test()
    multiple_threads_test()
    multiple_process_test()
    gevent_test()

输出结果如下:

单线程使用时间: 280.38603711128235
多线程使用时间: 68.45191502571106
多进程使用时间: 1.3390767574310303
协程使用时间: 15.374879360198975

可以发现相比单线程而言,多线程执行方式的确能够提高抓取的效率。然而多线程的在网络良好的情况是远远比不上多进程的,因为多进程抓取的快慢主要取决于网络。协程,又叫做子例程,可以把它看作是一种轻量的线程,似乎比多线程的处理更高效。

使用 Python 抓取亚马逊产品数据: 分步指南 在本分步指南中学习如何使用Python抓取亚马逊产品数据。探索提取标题、价格、评论等的实用技巧。 阅读详情

相关推荐

Scrapy分布式爬虫实战:高效抓取的进阶之旅

本文带你从单机到分布式,用Scrapy-Redis打造战舰编队,席卷数据珍宝!代码无bug,经验实用,助你征服大规模抓取。快来评论区分享你的分布式征程,下一期“Scrapy反爬博弈实战”与你共创辉煌!

Kelaru的博客 3046

python使用spynner抓取动态页面数据

http://www.comingcode.com/?p=275     这篇文章是我最近一直想完成的一篇文章,因为之前做的爬虫只能爬取静态页面的数据,但是现在这个时代,大部分的web页面都是动态的,经常逛的网站例如京东、淘宝等,商品列表都是js获取到后台数据后再组合成html展示出来的,单纯获取页面数据回来,而没有执行到js的话是无法看到商品数据列表信息的,这个可以通过两步来验

QZC295919009的专栏 4791

使用Hadoop与Python抓取并分析大数据的完整指南

Hadoop是一个开源的分布式计算框架,旨在存储和处理大规模数据。:分布式文件系统,用于存储海量数据。它能够将大数据拆分为多个块,并将它们分布式存储在多台机器上。MapReduce:分布式计算模型,支持大规模数据处理任务的并行执行。MapReduce可以将数据处理任务拆分为多个子任务,分布式计算并汇总结果。Hadoop的优势在于其高扩展性、容错性和高吞吐量,特别适用于处理PB级别的数据集。Python提供了多个库来帮助我们进行网页抓取和数据处理。requests:用于发送HTTP请求并获取网页内容。

2201_76125261的博客 456

Python spynner 解决中文不显示

spynner  Spynner是一个可编程Web浏览器Python模块。支持AJAX。 Spynner是一个有状态,可编程Web浏览器Python模块。它基于 PyQT 和 WebKit构建。支持 Javascript, AJAX,和所有其它WebKit能够处理的技术(Flash, SVG, ...)。Spynner利用 JQuery。 使用Spynner你可以模拟一个Web浏

java、python、大数据 1125

网站内容抓取技术与实战详解

网站内容抓取技术,是指通过自动化程序从互联网页面中提取结构化或非结构化数据的技术手段。其核心目的在于实现数据采集、信息整合与分析,广泛应用于搜索引擎优化(SEO)、电商价格监控、舆情分析、市场调研等多个领域。从早期的手动复制粘贴,到如今基于Python、Scrapy、Selenium等工具构建的自动化爬虫系统,抓取技术经历了从静态页面解析到动态渲染、从单机运行到分布式架构的演变。当前,抓取技术面临的主要挑战包括反爬机制日益复杂、数据动态加载、IP封禁等问题。

weixin_42583683的博客 2055

spynner-2.19

spynner-2.19,在windows上也可以轻松的抓取动态网页啦

探索Spynner:Python自动化网页抓取与交互利器

探索Spynner:Python自动化网页抓取与交互利器 项目简介 Spynner是一款强大的Python库,专为自动网页浏览、网页数据抓取和交互而设计。它通过模拟浏览器行为,可以轻松处理JavaScript渲染的内容,并提供了丰富的功能,如点击链接、填写表单、执行JavaScript等。对于需要进行大规模网页爬虫或自动化测试的开发者来说,这是一个非常实用的工具。 技术分析 JavaScript支...

gitblog_00084的博客 384

Python网络爬虫项目开发实战_数据抓取_编程案例解析实例详解课程教程.pdf

一个爬虫,可以通过跟踪链接的方式下载我们所需的网页。虽然这个例子很有意思,却不够实用,因为爬虫在下载网页之后又将结果丢弃掉了。现在,我们需要让这个爬虫从每个网页中抽取一些数据,然后实现某些事情,这种做法也被称为抓取(scraping)。首先,我们会介绍一个叫做Firebug Lite的浏览器扩展,用于检查网页内容,如果你有一些网络开发背景的话,可能己经对该扩展十分熟悉了。然后,我们会介绍三种抽取网页数据的方法,分别是正则表达式、Beautiful Soup和lxml。最后,我们将对比这三种数据抓取方法。

python开发浏览器_Spynner是一个可编程Web浏览器Python模块

Spynner is a stateful programmatic web browser module for Python. It is based upon PyQT and WebKit. It supports Javascript, AJAX, and every other technology that !WebKit is able to handle (Flash, SVG...

weixin_34219634的博客 449

Windows系统的Mamba环境配置详细教程(状态空间模型)

causal_conv1d也是安装mamba的依赖必须库。安装完成后,通过pip list可以查看到安装的库。Triton是安装mamba的依赖,需要先安装。上述工作准备好后,按下面步骤安装。直接根据离线文件安装即可。是自己的虚拟环境名字。

2301_77831163的博客 3677

Lumerical官方案例、FDTD时域有限差分法仿真学习(十三)——多模干涉耦合器(MMI)

计算通过 1×2 端口多模干涉 (MMI) 耦合器的宽带传输和光损耗。 使用设备 S 参数在 INTERCONNECT 中创建 MMI 的紧凑模型。 它还展示了如何使用 CML 编译器提取这些参数以生成紧凑模型。 一、概述 了解模拟工作流程和关键结果 低损耗光合路器和分路器是基于 Mach-Zehnder 的光调制器的基本组件,并且是集成电路的关键组成部分。通过在输入/输出波导处使用线性锥形确保输入/输出波导的模式与干涉区域之间的

weixin_45719141的博客 1万+

使用 scrapy 爬取 stackoverflow 上的所有 Python 问答

点击“简说Python”,选择“星标公众号”福利干货,第一时间送达!大家好,我是老表阅读文本大概需要 5分钟今天,给大家分享个爬虫实战案例。如果你此前从未听说Scrsp...

简说Python的博客 1615

Wireshark教程:解密HTTPS流量

Wireshark教程:如何解密HTTPS流量

nuan444979的博客 1万+

python数据抓取与实战_Python数据抓取技术与实战

第1章 Python基础1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!11 Python安装1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!12 安装pip 6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!13 如何查看帮助7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!14 第一个程序10 !!!!!!!!!!!!!!!!!!!!...

weixin_39531374的博客 142

重塑计算的五层蛋糕:解读黄仁勋CES2026演讲背后的AI新秩序与物理世界

2026年CES演讲揭示AI新纪元:从语言模型到物理智能 NVIDIA CEO黄仁勋在2026年CES演讲中描绘了计算产业的根本性变革。核心突破包括: 计算范式转移:从指令执行转向意图理解,智能体系统崛起 物理AI突破:发布Cosmos世界模型,通过合成数据训练AI理解物理定律 全新VeraRubin计算平台:6芯片协同设计,解决摩尔定律放缓与AI需求增长的矛盾 自动驾驶革命:推出具备推理能力的Alpamayo模型,实现L4级自动驾驶 演讲标志着AI正从数字世界迈向物理世界,NVIDIA通过全栈布局,正在重

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1275

UE5 GAS 学习笔记 1.2游戏标签

这一节对GameplayTag游戏标签进行详细的讲解。

CloudHuCoding 1928

python数据抓取与实战_Python数据抓取技术与实战 pdf

Python数据抓取技术与实战 目录D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字典1.11集合1.12随机数1.13enumerate的使用1.14D1二个实例D12章字符串解析2.1常用函数2.2正则表达式2.3BeautifulSoup2.4json结构D13章单机数据抓取3....

weixin_39727934的博客 126

MIKE21 教程 3.2 随空间变化的网格文件制作(.dfsu文件制作) 曼宁值网格文件制作

上一节讲解了如何制作时间序列文件。本节讲解如何制作仅随空间变化的文件。 目录 1 数据准备 1.1 基于地形设置 1.2 基于地形水深设置: 2 数据导入 3 数据导出

Hello Word 3941

python抓取数据的技术_Python数据抓取技术与实战 pdf

Python数据抓取技术与实战目录D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字典1.11集合1.12随机数1.13enumerate的使用1.14D1二个实例D12章字符串解析2.1常用函数2.2正则表达式2.3BeautifulSoup2.4json结构D13章单机数据抓取3.1...

weixin_39934640的博客 93

汽车行业新能源汽车数据爬虫:抓取新能源汽车数据,分析市场发展和技术创新

在汽车行业,新能源汽车市场的发展和技术创新是当前的热点话题。通过抓取新能源汽车的数据,我们可以深入了解市场趋势、消费者需求以及技术创新的方向。本文将详细介绍如何使用 Python 爬虫技术抓取新能源汽车数据,并对数据进行分析和可视化展示。

u014481728的博客 1144

PrimeTime low power-多电压设计流程(1)

PrimeTime支持使用IEEE 1801统一电源格式(UPF)标准来指定设计的多电压特性。PrimeTime能够在多电压供电和使用set_voltage命令在特定电源网上设置电压值的情况下,正确分析设计的时序。要了解如何使用多电压设计流程,请参考以下内容:- 多电压分析需求- 指定电源连接性- UPF命令- GoldenUPF流程- 多重电源电压分析。

QRBQ 529

Python数据抓取技术与实战 pdf

Python数据抓取技术与实战 目录 D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字典1.11集合1.12随机数1.13enumerate的使用1.14D1二个实例D12章字符串解析2.1常用函数2.2正则表达式2.3BeautifulSoup2.4json结构D13章单机数...

weixin_34015860的博客 573

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python爬虫(24)Python分布式爬虫架构实战:Scrapy-Redis亿级数据抓取方案设计

在千万级数据抓取需求下,传统单机爬虫面临严峻挑战: ‌IP封锁阈值‌:单个IP日均请求上限普遍低于5万次 ‌存储性能瓶颈‌:内存型去重库(如set)突破百万级后性能骤降 ‌网络带宽限制‌:单机下载带宽利用率峰值仅达60% ‌故障恢复困难‌:断点续爬需要手动维护复杂状态 ‌扩展成本高昂‌:垂直扩展(升级硬件)成本呈指数增长 ‌分布式爬虫优势‌: 横向扩展:线性提升抓取吞吐量 动态伸缩:根据负载自动增减节点 高可用性:单节点故障不影响整体任务

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 2939

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python爬虫【二十四章】分布式爬虫架构实战:Scrapy-Redis亿级数据抓取方案设计

‌吞吐量飞跃‌:线性扩展提升40倍+处理能力‌成本优化‌:硬件利用率提升至85%以上‌系统健壮性‌:实现7×24小时稳定运行。

2501_92499985的博客 2087

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python爬虫实战:电商数据抓取与反爬策略

网络爬虫作为数据采集的核心技术,通过模拟HTTP请求实现网页内容的自动化获取。其工作原理主要基于请求响应机制和DOM解析,Python生态的Requests、BeautifulSoup等库极大降低了开发门槛。在数据驱动决策的今天,爬虫技术广泛应用于竞品分析、舆情监控等商业场景,特别是电商领域的价格监控需求旺盛。针对淘宝等平台的反爬机制,需要掌握IP代理池、请求头伪装等对抗策略,同时需注意分布式爬虫架构设计和法律合规边界。本文通过商品信息抓取案例,详解动态内容加载处理和验证码破解等工程实践。

weixin_30851867的博客 856

数据集成-4-Python数据爬取技术与实战

数据集成-4-Python数据爬取技术与实战

SpriCoder的博客 873
上一篇: 【python数据抓取技术与实战】json
下一篇: 【汇总】软件、资料下载清单
yeverwen
博客等级 码龄14年 116粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值