python爬虫的基本技巧

Python网络爬虫技术详解与实践案例 Python网络爬虫作为一种高效的数据获取工具,在大数据时代具有广泛的应用前景。本文详细介绍了Python网络爬虫的基本概念、流程、进阶技巧,并通过具体代码案例展示了其应用。希望读者能够掌握这些知识和技巧,开发出更加高效、稳定、合规的Python网络爬虫。 阅读详情

1.最基本的抓站

import urllib2
content = urllib2.urlopen('http://XXXX').read()

-
2.使用代理服务器
这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。

import urllib2
proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()

-
3.需要登录的情况
登录的情况比较麻烦我把问题拆分一下:
-
3.1 cookie的处理

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

是的没错,如果想同时用代理和cookie,那就加入proxy_support然后operner改为

opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)

-
3.2 表单的处理
登录必要填表,表单怎么填?首先利用工具截取所要填表的内容
比如我一般用firefox+httpfox插件来看看自己到底发送了些什么包
这个我就举个例子好了,以verycd为例,先找到自己发的POST请求,以及POST表单项:

可以看到verycd的话需要填username,password,continueURI,fk,login_submit这几项,其中fk是随机生 成的(其实不太随机,看上去像是把epoch时间经过简单的编码生成的),需要从网页获取,也就是说得先访问一次网页,用正则表达式等工具截取返回数据中 的fk项。continueURI顾名思义可以随便写,login_submit是固定的,这从源码可以看出。还有username,password那 就很显然了。
-
好的,有了要填写的数据,我们就要生成postdata

import urllib
postdata=urllib.urlencode({
    'username':'XXXXX',
    'password':'XXXXX',
    'continueURI':'http://www.verycd.com/',
    'fk':fk,
    'login_submit':'登录'
    })

-
然后生成http请求,再发送请求:

req = urllib2.Request(
    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
    data = postdata)

result = urllib2.urlopen(req).read()

-
3.3 伪装成浏览器访问
某些网站反感爬虫的到访,于是对爬虫一律拒绝请求
这时候我们需要伪装成浏览器,这可以通过修改http包中的header来实现
#…

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'
}
req = urllib2.Request(
    url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/',
    data = postdata,
    headers = headers
)
#...

-
3.4 反”反盗链”
某些站点有所谓的反盗链设置,其实说穿了很简单,就是检查你发送请求的header里面,referer站点是不是他自己,所以我们只需要像3.3一样, 把headers的referer改成该网站即可,以黑幕著称地cnbeta为例:

#...
headers = {
    'Referer':'http://www.cnbeta.com/articles'
}
#...

headers是一个dict数据结构,你可以放入任何想要的header,来做一些伪装。例如,有些自作聪明的网站总喜欢窥人隐私,别人通过代理 访问,他偏偏要读取header中的X-Forwarded-For来看看人家的真实IP,没话说,那就直接把X-Forwarde-For改了吧,可以 改成随便什么好玩的东东来欺负欺负他,呵呵。
-
3.5 终极绝招
有时候即使做了3.1-3.4,访问还是会被据,那么没办法,老老实实把httpfox中看到的headers全都写上,那一般也就行了。
再不行,那就只能用终极绝招了,selenium直 接控制浏览器来进行访问,只要浏览器可以做到的,那么它也可以做到。类似的还有pamie,watir,等等等等。
-
4.多线程并发抓取
单线程太慢的话,就需要多线程了,这里给个简单的线程池模板
这个程序只是简单地打印了1-10,但是可以看出是并发地。

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()

5.验证码的处理
碰到验证码咋办?这里分两种情况处理:
-
1.google那种验证码,凉拌
-
2.简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分 单个字符,划分好了以后再通过特征提取的方法(例如PCA) 降维并生成特征库,然后把验证码和特征库进行比较。这个比较复杂,一篇博文是说不完的,这里就不展开了,具体做法请弄本相关教科书好好研究一下。
-
3.事实上有些验证码还是很弱的,这里就不点名了,反正我通过2的方法提取过准确度非常高的验证码,所以2事实上是可行的。

-

文本转自月语凋凌的博客。


下面附上一个零基础的教学链接http://edu.51cto.com/lesson/id-12393.html

Python网络爬虫:从入门到实践的全面指南 本书《Web Scraping with Python》由Ryan Mitchell撰写,是关于如何使用Python进行网络数据抓取的第二版。书中详细介绍了构建网络爬虫的基础知识与高级技巧,包括如何连接网页、解析HTML、编写爬虫、存储数据以及处理文档、图片和API。本书适合不同层次的读者,从初学者到希望扩展知识的中级开发者。 阅读详情

相关推荐

保姆级教程:用达芬奇Configurator配置CAN总线(从DBC导入到Controller设置)

本文详细介绍了使用达芬奇Configurator工具从DBC文件导入到CAN总线控制器设置的全流程配置方法。通过环境准备、CAN控制器模式选择、硬件参数配置、通信参数优化及通信栈集成等关键步骤,帮助开发者高效完成AUTOSAR架构下的CAN总线开发,特别适合汽车电子领域的工程师参考。

weixin_30529023的博客 443

Python网络爬虫入门指南

Python网络爬虫是一种强大的数据收集工具,通过合理设计和使用,可以帮助我们快速获取互联网上的信息。然而,在编写和使用爬虫时,也要遵守相关法律法规和网站的使用条款,避免对目标网站造成不必要的负担和损害。希望本文能帮助你入门Python网络爬虫,并在实际项目中发挥其应有的作用。

运维人生 1162

Dify平台+Excel批量分析实战:5分钟搞定大模型数据处理(附完整代码)

本文详细介绍了如何利用Dify平台的数据集功能,结合Excel和Python脚本,快速构建大模型批量数据处理流水线。通过实战案例演示,读者可在5分钟内完成客户反馈情感分析、产品文案生成等任务,实现从原始数据到结构化洞察的高效转化,极大提升工作效率。

3a9bq4r8t2y的博客 316

网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)

导读:本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方...

大数据 3万+

如何在NVIDIA CX6 网卡和华为CE交换机上为RDMA协议使能DCQCN和PFC

【代码】如何在NVIDIA CX6 网卡和华为CE交换机上使能DCQCN和PFC。

Markchen7788的博客 5094

ANSYS 有限元分析 接触分析

目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY

Hulunbuir 4万+

Python网络爬虫全攻略:从零到一,打造你的数据收集利器

网络爬虫(Web Crawler),也被称为网页蜘蛛(Web Spider),是一种自动获取网页内容的程序。它按照一定的规则,自动地抓取互联网信息。网络爬虫可以用于数据采集、信息监控、搜索引擎构建等多种场景。通过本文的介绍,你应该对Python网络爬虫有了全面的了解。从基础的请求发送、内容解析到数据存储,再到进阶的多线程、异步请求和框架使用,每一步都是构建高效爬虫的关键。记住,技术是工具,合理合法地使用技术,才能发挥其最大的价值。

来自想要赚大钱的小周同学 1781

告别糊涂账!用CKM3底表逻辑自建物料成本监控报表(含ABAP代码片段)

本文详细介绍了如何利用CKM3底表逻辑自建物料成本监控报表,解决标准报表无法穿透成本差异根源的问题。通过ABAP代码片段和四步架构法,帮助财务团队精准分析成本构成,优化成本核算批量处理,实现多维透视差异分析,提升成本监控效率。

weixin_30740295的博客 267

python爬虫基本知识

最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫。下面这篇文章给大家介绍了python爬虫基本知识,感兴趣的朋友一起看看吧 爬虫简介 根据百度百科定义:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字...

python爬虫开发教程 2172

电能质量仿真:电能质量改善措施仿真_(12).电能质量改善措施综合仿真案例

假设我们有一个微电网系统,该系统包含分布式电源(如光伏板、风力发电机)、储能设备、负荷和电网连接。电压波动:由于负荷的波动和分布式电源的间歇性输出,系统电压出现了不稳定的情况。谐波污染:非线性负荷和逆变器的运行导致系统中出现了显著的谐波污染。频率偏差:分布式电源的波动和负荷的突变导致系统频率出现了偏差。我们需要通过仿真来评估这些问题的影响,并提出相应的改善措施。

2401_87715305的博客 1360

数字图像处理 基于OpenCV的景深融合算法

还有的思路是对图像序列中的每一张图像分别进行拉普拉斯金字塔拆分,提取出每一张图像的高频信息和低频信息,得到所述图像序列对应的高频信息集合和低频信息集合。然后根据所述高频信息集合得到合成后的高频信息,对所述低频信息集合进行导向滤波处理得到合成后的低频信息,根据所述合成后的高频信息和低频信息做拉普拉斯金字塔重构,得到一张超景深图像。这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。

学以致用 知行合一 3902

Python网络爬虫:深入数据的海洋

Scrapy是一个强大的爬虫框架,提供了许多功能,如自动处理请求、解析响应、存储数据等。使用Scrapy可以快速构建复杂的爬虫项目。然后在生成的爬虫文件中编写爬取逻辑。网络爬虫是一个强大的工具,它可以帮助我们从海量的网络数据中提取有价值的信息。通过Python,我们可以快速上手并开发出功能强大的爬虫程序。但同时,我们也必须意识到,技术的使用应当遵循法律和道德的约束,以确保网络环境的健康和可持续发展。这篇文章只是一个起点,网络爬虫的世界广阔无垠,等待着你去探索和发现。

ciweic的博客 1432

SerDes学习笔记:接收机CTLE均衡架构示例(USB3.1、PCIe3.0\4.0\5.0)

本文分析了USB3.1和PCIe标准中连续时间线性均衡器(CTLE)的设计演进。USB3.1Gen1采用一阶CTLE,其传递函数在长信道下具有有源滤波器特性;Gen2版本延续类似架构,通过Adc参数调节零点频率。PCIeGen3/4保持一阶结构但调整极点位置,Gen5升级为二阶传递函数,扩展Adc调节范围至-5dB~-15dB。研究表明,CTLE能有效改善信号完整性,通过参数优化可平衡信号衰减与码间干扰抑制。

一只豌豆象的博客 626

Python 网络爬虫

自动发送 HTTP 请求访问网页;下载网页资源(HTML、图片、文件等);解析并提取所需信息;实现数据存储与后续处理。网络爬虫在数据采集、搜索引擎、舆情监控等方面有着广泛的应用。

专注于C/C++、Python、嵌入式、Linux与算法研究的技术分享者,记录成长,分享干货,积累价值。 3242

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...

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python网络爬虫教程:轻松掌握数据采集!

Python凭借其丰富的库和简洁的语法,成为了网络爬虫开发的首选语言。本文将带你从零开始,轻松掌握Python网络爬虫的基本技能,并通过详细的代码示例,帮助你快速上手数据采集。通过本文的学习,你已经掌握了Python网络爬虫的基本技能,并能够进行简单的数据采集。在实际项目中,你可能会遇到更复杂的情况,但万变不离其宗,掌握了基础,再复杂的爬虫也能应对自如。获取到网页内容后,我们需要解析HTML,提取出有用的信息。首先,我们需要使用requests库发送HTTP请求,获取网页内容。设置请求头:模拟浏览器请求。

Python_trys的博客 1763

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

入门python爬虫数据收集

一、前言 你是不是在为想收集数据而不知道如何收集而着急? 你是不是在为想学习爬虫而找不到一个专门为小白写的教程而烦恼? Bingo! 你没有看错,这就是专门面向小白学习爬虫而写的!我会采用实例的方式,把每个部分都跟实际的例子结合起来帮助小伙伴儿们理解。最后再写几个实战的例子。 我们使用Python来写爬虫,一方面因为Python是一个特别适合变成入门的语言,另一方面,Python也有很多爬虫相关的...

qq_42868523的博客 1193

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

网络爬虫入门指南:从原理到实践

网络爬虫是一项强大但需要谨慎使用的技术。通过本文的介绍,你应该已经了解了爬虫的基本原理、Python实现方法以及相关的高级技术和法律考量。记住,能力越大责任越大,在享受爬虫带来的便利时,也要遵守网络道德和相关法律法规。Scrapy框架分布式爬虫架构机器学习在数据抽取中的应用自然语言处理在文本分析中的使用希望这篇指南能帮助你在网络爬虫的世界中顺利启航!

CG13688785557的博客 1797

【Python网络爬虫】一篇带你Python网络爬虫入门

爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。

左手の明天的博客 1691

Python 网络爬虫:从入门到实践

Python 网络爬虫因其灵活性和高效性,已经成为数据采集领域的主力工具。从简单的 HTML 提取到动态页面抓取,从单机爬虫到分布式爬虫,Python 提供了丰富的工具和框架来满足各种需求。然而,在使用爬虫时,需注意合法合规,并对抓取的数据进行合理利用。通过不断学习和实践,你可以轻松掌握网络爬虫技术,为数据分析、机器学习等领域提供有力支持。网络爬虫是一种自动化的程序,用于从互联网上抓取数据。Python 以其强大的库和简单的语法,是开发网络爬虫的绝佳选择。使用 Scrapy 和。

qq_20245171的博客 2150

网络爬虫:数据世界的小忍者

网络爬虫是一种强大的工具,可以帮助我们从网页的海洋中捕获宝贵的数据。但记住,随着伟大力量的获得,也要有伟大的责任感。使用爬虫时要尊重数据来源,合法合规地使用网络资源。现在,带上你的编程忍者装备,开始你的数据探险之旅吧!

专注 Python 从入门到精通、编程思维拆解与实战应用 用通俗语言讲清楚“为什么这样写”,陪你走过新手最难的阶段。 676

Python网络爬虫技术手册源码下载

Python网络爬虫技术手册源码下载 去发现同类优质开源项目:https://gitcode.com/ 这里是《Python网络爬虫技术手册》的源码资源下载仓库。本手册详尽介绍了Python网络爬虫的相关技术,内容涵盖了网络爬虫的基本概念、编程实践以及相关库的使用等,旨在帮助读者理解和掌握网络爬虫技术的应用。 本源码仓库包含了书籍中的示例代码和实用工具,可供读者下载使用,以加深对书中内容的理解和实...

gitblog_06748的博客 345

python爬虫入门之什么是爬虫?

一、前言 你是不是在为想收集数据而不知道如何收集而着急? 你是不是在为想[学习爬虫]而找不到一个专门为小白写的教程而烦恼? Bingo! 你没有看错,这就是专门面向小白学习爬虫而写的!我会采用实例的方式,把每个部分都跟实际的例子结合起来帮助小伙伴儿们理解。最后再写几个实战的例子。 我们使用Python来写爬虫,一方面因为Python是一个特别适合变成入门的语言,另一方面,Python也有很多爬虫相...

weixin_34362790的博客 93

python网络爬虫_网络爬虫:Python如何从网上爬取数据?

网络爬虫,就是按照一定规则自动访问互联网上的信息并把内容下载下来的程序或脚本。在整个的Python爬虫架构里,从基础到深入我分为了10个部分:HTTP、网页、基本原理、静态网页爬取、动态网页爬取、APP爬取、多协程、爬虫框架、分布式爬虫以及反爬虫机制与应对方法。1.HTTP使用Python网络爬虫首先需要了解一下什么是HTTP,因为这个跟Python爬虫的基本原理息息相关。而正是围绕着这些底层逻辑...

weixin_39856055的博客 900

python3 爬虫 requests安装_Python3 网络爬虫(一):初识网络爬虫之夜探老王家

1前言3年前,我在 csdn 写过 Python3 网络爬虫系列教程,经过三年的积累,累计阅读量近 90W。同时,我也在 Github 开源了所有 Python3 网络爬虫代码,累积获得 10.3k+ 的 star,4.1k+ 的 fork。可以说,这个系列教程算是比较成功的,在全国的开源网络爬虫教程项目中,也是排在前几名的。但是,由于时间太长了,陆陆续续,很多实战示例也早已失效。网络爬...

weixin_39595487的博客 216

python5.网络爬虫

# 爬虫的流程和常用包 # import requests 发送请求 # import re 正则表达式 # import bs4 解析源代码 # requests.get -- 基于URL,发送网络请求 # re.findall -- 基于正则表达式,搜寻目标数据 # bs4.BeautifulSoup -- 对HTML源代码做解析,便于目标数据的拆解 #对红牛公司进行网络爬虫 import requests import re import bs4 url = r'http:/

Henry的博客 1341
上一篇: python的argparse模块的使用
下一篇: mac上配置nginx+PHP+MySQL的笔记
seesoj
博客等级 码龄15年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值