Python爬虫:一些常用的爬虫技巧总结

Python网络爬虫进阶最佳实践:解决反爬虫策略的常用技巧 常见的模拟浏览器的方式有两种:一种是使用headless浏览器,如PhantomJS、Selenium等,另一种是直接分析动态网页的JavaScript代码,模拟相应的请求获取数据。因此,在爬虫中需要尽可能模拟人类的行为,比如设置随机的请求头、随机的时间间隔、随机的访问路径等,以增加爬虫的隐蔽性和逃避反爬虫检测的可能性。同时,需要不断学习和掌握新的技术,以适应不断变化的反爬虫策略和技术。网络爬虫是一种自动化获取网站数据的方式,但是由于爬虫的性质和目的,许多网站会采取反爬虫策略,使得爬虫难以获取数据。 阅读详情

用Python也差不多一年多了,Python应用最多的场景还是Web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。

1、基本抓取网页

get方法

import urllib2  
url = "http://www.baidu.com"  
response = urllib2.urlopen(url)  
print response.read() 

post方法

import urllib  
import urllib2  
url = "http://abcde.com"  
form = {'name':'abc','password':'1234'}  
form_data = urllib.urlencode(form)  
request = urllib2.Request(url,form_data)  
response = urllib2.urlopen(request)  
print response.read() 

2、使用代理IP

在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP;

在urllib2包中有ProxyHandler类,通过此类可以设置代理访问网页,如下代码片段:

import urllib2  
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})  
opener = urllib2.build_opener(proxy)  
urllib2.install_opener(opener)  
response = urllib2.urlopen('http://www.baidu.com')  
print response.read() 

3、Cookies处理

cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了cookielib模块用于处理cookies,cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。

代码片段:

import urllib2, cookielib  
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar()) 
opener = urllib2.build_opener(cookie_support)  
urllib2.install_opener(opener)  
content = urllib2.urlopen('http://XXXX').read() 

关键在于CookieJar(),它用于管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失,所有过程都不需要单独去操作。

手动添加cookie:

cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="  
request.add_header("Cookie", cookie) 

4、伪装成浏览器

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况。

对有些 header 要特别留意,Server 端会针对这些 header 做检查:

1.User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request。

2.Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

这时可以通过修改http包中的header来实现,代码片段如下:

import urllib2  
headers = {  
    'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'  
}  
request = urllib2.Request(  
    url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',  
    headersheaders = headers  
)  
print urllib2.urlopen(request).read() 

5、页面解析

对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样,就不用过多的说明,附两个比较好的网址:

正则表达式入门: http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

正则表达式在线测试:

http://tool.oschina.net/regex/

其次就是解析库了,常用的有两个lxml和BeautifulSoup,对于这两个的使用介绍两个比较好的网站:

lxml: http://my.oschina.net/jhao104/blog/639448

BeautifulSoup: http://cuiqingcai.com/1319.html

对于这两个库,我的评价是,都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxml C语言编码,高效,支持Xpath。

6、验证码的处理

对于一些简单的验证码,可以进行简单的识别。本人也只进行过一些简单的验证码识别。但是有些反人类的验证码,比如12306,可以通过打码平台进行人工打码,当然这是要付费的。

7、gzip压缩

有没有遇到过某些网页,不论怎么转码都是一团乱码。哈哈,那说明你还不知道许多web服务具有发送压缩数据的能力,这可以将网络线路上传输的大量数据消减 60% 以上。这尤其适用于 XML web 服务,因为 XML 数据 的压缩率可以很高。

但是一般服务器不会为你发送压缩数据,除非你告诉服务器你可以处理压缩数据。

于是需要这样修改代码:

import urllib2, httplib  
request = urllib2.Request('http://xxxx.com')  
request.add_header('Accept-encoding', 'gzip')  
opener = urllib2.build_opener()  
f = opener.open(request) 

这是关键:创建Request对象,添加一个 Accept-encoding 头信息告诉服务器你能接受 gzip 压缩数据。

然后就是解压缩数据:

import StringIO  
import gzip  
compresseddata = f.read()  
compressedstream = StringIO.StringIO(compresseddata)  
gzipgzipper = gzip.GzipFile(fileobj=compressedstream) 
print gzipper.read() 

8、多线程并发抓取

单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。

虽然说Python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。

from threading import Thread  
from Queue import Queue  
from time import sleep  
# q是任务队列  
#NUM是并发线程总数  
#JOBS是有多少任务  
q = Queue()  
NUM = 2  
JOBS = 10  
#具体的处理函数,负责处理单个任务  
def do_somthing_using(arguments):  
    print arguments  
#这个是工作进程,负责不断从队列取数据并处理  
def working():  
    while True:  
        arguments = q.get()  
        do_somthing_using(arguments)  
        sleep(1)  
        q.task_done()  
#fork NUM个线程等待队列  
for i in range(NUM):  
    t = Thread(target=working)  
    t.setDaemon(True)  
    t.start()  
#把JOBS排入队列  
for i in range(JOBS):  
    q.put(i)  
#等待所有JOBS完成  
q.join()  
Python网络爬虫入门最佳实践:学会使用Python爬取网页数据的常用技巧 然后,我们使用get()方法访问包含动态内容的网站,并使用wait_for_element_visible()方法等待元素加载。在上面的代码中,我们使用requests发送POST请求,发送带有登陆表单数据的负载。在爬虫过程中,我们需要了解HTML的基本结构和常见的标签,以便正确地解析和提取我们需要的信息。网络爬虫是一个自动化的程序,可以浏览互联网上的页面并提取希望的数据。在上面的代码中,使用select()方法传递一个CSS选择器字符串,查找包含“example”类的div标记。 阅读详情

相关推荐

智能问数产品背后的Agent技术揭秘:从任务分解到工具调用的完整流程

本文深入解析智能问数产品背后的Agent技术,从任务分解到工具调用的完整流程。通过大模型驱动的语义理解和动态工具调度,Agent系统能高效处理复杂数据分析需求,显著提升响应速度和准确率。文章详细介绍了模块化架构、任务分解机制、动态工具调用及双通道记忆系统等核心技术,展示了大模型时代的新型数据分析范式。

weixin_30399821的博客 438

python代码_什么是网络爬虫?有什么用?用Python怎么爬?终于有人讲明白了

python作为一门高级编程语言,它的定位是优雅、明确和简单。我学用python差不多一年时间了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本。这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,故累积了不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。1、基本抓取网页ge...

weixin_39631755的博客 132

RseQC实战指南:从安装到RNA-Seq数据质控全流程解析

本文提供了一份详尽的RseQC实战指南,涵盖从安装配置到RNA-Seq数据质控的全流程。文章重点解析了RseQC作为专业质控工具的核心价值,手把手指导如何通过Conda或pip完成安装,并深入讲解了bam_stat.py、geneBody_coverage.py等关键模块的使用方法与结果解读技巧,帮助用户有效评估RNA完整性、文库构建质量及链特异性,确保下游分析的可靠性。

weixin_29200741的博客 201

良心推荐!Python爬虫高手必备的8大技巧!

想要快速学习爬虫,最值得学习的语言一定是Python,Python应用场景比较多,比如:Web快速开发、爬虫、自动化运维等等,可以做简单网站、自动发帖脚本、收发邮件脚本、简单验证码识别脚本。 原文链接: 良心推荐!Python爬虫高手必备的8大技巧! 爬虫在开发过程中也有很多复用的过程,今天就总结一下必备的8大技巧,以后也能省时省力,高效完成任务。 1、基本抓取网页 get方法 import urllib2 url = "http://www.baidu.com" response = urllib2

Python学习与数据挖掘 556

电镀技术:微型制造的原子级加法工艺与核心优势

电镀是一种利用电解原理在基材表面沉积金属层的表面处理技术,其本质是通过电场控制溶液中金属离子的迁移与还原,实现原子级的可控沉积。这一过程的核心在于对电流密度、温度、添加剂等参数的精密调控,从而实现对镀层结晶结构、性能的“编程”。从技术价值看,电镀作为一种“加法制造”工艺,在微观尺度上具有无与伦比的保形性和材料灵活性,能够实现复杂三维结构的均匀覆盖与功能复合。在应用场景上,它尤其契合现代微型化制造的需求,例如在集成电路的铜互连填充、高密度PCB板微孔金属化、MEMS传感器电极制备以及柔性电子器件制造中发挥着不

weixin_42524842的博客 528

Global Mapper与ArcGIS双剑合璧:自动化与半自动矢量化提取地物轮廓实战

本文详细介绍了如何结合Global Mapper的自动化批量提取与ArcGIS的半自动精细修整功能,高效完成地物轮廓矢量化工作。通过实战案例,阐述了利用Global Mapper快速抓取初步轮廓,再借助ArcGIS的ArcScan等工具进行精细化编辑和优化的完整工作流,有效提升地理信息数据处理效率。

weixin_29284657的博客 119

urlopen实现多线程下载

多线程下载步骤 使用 urlopen() 方法打开远程资源 获取指定的 URL 对象所指向资源的大小(通过 Content-Length 响应头获取 计算每个线程应该下载网络资源的哪个部分(从哪个字节开始,到哪个字节结束) 依次创建并启动多个线程来下载网络资源的指定部分 相当于多个线程执行体,对同一资源进行分段下载 断点下载原理 下载之初 生成网络资源具有相同大小的空文件 及 配置文件 ...

pardon110的博客 527

避开SAM3安装大坑:手把手教你用国内镜像和Modelscope权重快速跑通Demo

本文详细介绍了如何在国内环境下快速部署SAM3视觉大模型,包括使用国内镜像加速Python包安装、通过Modelscope获取权重文件以及解决CUDA 11.8等低版本适配问题。手把手教你避开常见安装陷阱,实现高效Demo运行。

weixin_30642561的博客 1407

python数据挖掘学习笔记

python数据挖掘学习笔记 1.python基础知识; 2.python爬虫技术; 3.python数据分析与数据挖掘。 1.python基础 1.输出 print() 2.注释 1.单行注释# 2.多行注释’’’ 3.变量 例:a = 5 python中由于没有显示的规定死a的变量类型 所以在a=5之后, 再a = “hello world” 同样可以正确运行 4.数据类型 数、字符串、列...

Jerry Lee の blog 774

Linux下Catapro酶动力学预测工具保姆级安装指南(PyTorch+CUDA11.8适配版)

本文提供了Linux系统下Catapro酶动力学预测工具的详细安装指南,特别适配PyTorch+CUDA11.8环境。从环境准备、源码获取到虚拟环境创建、依赖包安装和模型配置,逐步指导用户完成安装流程,并包含常见问题排查和性能优化建议,帮助研究者快速部署这一高效酶动力学参数预测工具。

weixin_29278805的博客 212

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.youkuaiyun.com/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

【Python奇淫技巧】用pandas的read_html函数仅一行代码实现网页爬虫

天秀!用python一行代码实现网页爬虫!!

马哥的专栏 3388

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

Python 爬虫:一些常用的爬虫技巧总结

用 python 也差不多一年多了,python 应用最多的场景还是 web 快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。

m0_72444380的博客 272

IMSL CNL 7.0.0 (x86-64)Crack

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python爬虫:一些常用的爬虫技巧总结!

用Python也差不多一年多了,Python应用最多的场景还是Web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。 爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 1、基本抓取网页 get方法 importurllib2 url="http://www.baidu.com" resp...

爬遍所有网站 167

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: Python爬虫使用requests下载文件,实现下载大文件断点续传
下一篇: 教你用 Python 修改微信(支付宝)运动步数,轻松升到 TOP1
Python_sn
博客等级 码龄6年 324粉丝 290原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值