⑴ 如何使用python解决网站的反爬虫
1、从用户请求的Headers反爬虫是最常见的反爬虫策略。
伪装header。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名[评论:往往容易被忽略,通过对请求的抓包分析,确定referer,在程序中模拟访问请求头中添加]。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。
2、基于用户行为反爬虫
还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。[这种防爬,需要有足够多的ip来应对]
(1)、大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib中很容易做到,这样就能很容易的绕过第一种反爬虫。
编写爬虫代理:
步骤:
1.参数是一个字典{'类型':'代理ip:端口号'}
proxy_support=urllib.request.ProxyHandler({})
2.定制、创建一个opener
opener=urllib.request.build_opener(proxy_support)
3a.安装opener
urllib.request.install_opener(opener)
3b.调用opener
opener.open(url)
用大量代理随机请求目标网站,应对反爬虫
⑵ python 爬虫,关于验证码的问题。输入验证码才能搜索。
#给你个例子参考验证码请求一次就变了
#!/usr/bin/python
#coding=utf-8
importrequests
importurllib
importurllib2,hashlib,md5
importcookielib
def_md5(password):
md5=hashlib.md5()
md5.update(str.encode(password))
psw=md5.hexdigest()
returnpsw
url='https://passport.liepin.com/captcha/randomcode?2hy270c2ji1'
req=urllib2.Request(url)
res_data=urllib2.urlopen(req)
res=res_data.read()
output_file=open('1.jpg','wb')
output_file.writelines(res)
output_file.close()
verifycode=res_data.headers['Set-Cookie'].split(';')[0]
verifycode=verifycode.replace('verifycode=','')
filename=res_data.headers['Content-disposition'].split(';')[1].strip()
exec(filename)
cookiejar=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
vidcode=raw_input(u"请输入验证码(在本路径1.jpg):")
data={'user_login':"[email protected]",
'isMd5':"1",
'user_pwd':_md5('love123456'),
'verifycode':vidcode,
'url':""}
url='https://passport.liepin.com/h/login.json'
data=urllib.urlencode(data)
headers={'Content-Type':'application/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest','Cookie':'verifycode={0};'.format(verifycode)}
request=urllib2.Request(url,data,headers)
response=opener.open(request)
print'-------result-------------'
printresponse.read()
print'-------headers-------------'
printresponse.headers
print'-------cookies-------------'
forcookieincookiejar:
printcookie
⑶ 用Python爬取大众点评时被反爬ip被封怎么办,他总叫我滑动验证但滑动了也没有用。。。求大佬帮忙。。。
1、放慢爬取速度,减小对于目标网站造成的压力。但是这样会减少单位时间类的爬取量。
第二种方法是通过设置IP等手段,突破反爬虫机制继续高频率爬取。网站的反爬机制会检查来访的IP地址,为了防止IP被封,这时就可以使用HTTP,来切换不同的IP爬取内容。使用代理IP简单的来讲就是让代理服务器去帮我们得到网页内容,然后再转发回我们的电脑。要选择高匿的ip,IPIDEA提供高匿稳定的IP同时更注重用户隐私的保护,保障用户的信息安全。
2、这样目标网站既不知道我们使用代理,更不会知道我们真实的IP地址。
3、建立IP池,池子尽可能的大,且不同IP均匀轮换。
如果你需要大量爬取数据,建议你使用HTTP代理IP,在IP被封掉之前或者封掉之后迅速换掉该IP,这里有个使用的技巧是循环使用,在一个IP没有被封之前,就换掉,过一会再换回来。这样就可以使用相对较少的IP进行大量访问。
⑷ python爬虫需要什么基础
1. 学习Python基础知识并实现基本的爬虫过程
一般获取数据的过程都是按照 发送请求-获得页面反馈-解析并且存储数据 这三个流程来实现的。这个过程其实就是模拟了一个人工浏览网页的过程。
Python中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,我们可以按照requests
负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。
2.了解非结构化数据的存储
爬虫抓取的数据结构复杂 传统的结构化数据库可能并不是特别适合我们使用。我们前期推荐使用MongoDB 就可以。
3. 掌握一些常用的反爬虫技巧
使用代理IP池、抓包、验证码的OCR处理等处理方式即可以解决大部分网站的反爬虫策略。
4.了解分布式存储
分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis
这三种工具就可以了。
⑸ python 爬取带验证码需要登陆后的网站
这个有点繁琐,告诉你,你也可能搞不定
首先请求网页,然后用你的未登录cookies去二次请求验证码,用byte类型保存在内存中,用pillow模块展示出来,你在手动输入,主程序这边用input阻塞,等你输入完,主程序向登录接口提交账号密码和验证码,然后后面就正常爬取,这是非selenium的模拟登录,这边纠正一点,凡是登录,不管你用什么模块,都属于模拟登录,并非selenium登录方式才叫模拟登录,
⑹ python爬取验证码图片,遇到验证码src属性为完整的网址应该怎么做
爬虫中手动输入验证码方法无法获取图片src地址
验证码在html中图片标签内容:
<class=“verCodeImg” src="/kaptcha.jpg?v=0.234724039578059" οnclick=“verCode(this)”>
< class=“verCodeImg” src="/kaptcha.jpg?v=0.234724239578059" οnclick=“verCode(this)”>
可知获取到验证码的src地址就能动态的获得验证码
因为验证码是动态的!动态的!动态的!
用动态爬取网页的方法:
要用到selenium库
其实获得了验证码的src地址,我还是没能成功登陆
因为即使是相同的链接点进去,每一次刷新都会有不同的验证码
通过动态网页打开是一张
解析src地址出来是另一张