×

用户登录


忘记密码 | 立即注册

×

找回登录密码


×

找回密码

×

用户注册


服务条款

已有账号?

服务条款

犀牛代理用户注册协议

  1. 1.您确认:您在使用本服务之前,已经充分阅读、理解并接受本服务条款的全部内容,您应当是具备完全民事权利能力和完全民事行为能力的自然人、法人或其他组织;
  2. 2.用户应保证在注册时提供的资料均真实、完整、无误;
  3. 3.不得利用本软件发表、传送、传播、储存违反国家法律、危害国家安全、祖国统一、社会稳定的内容,或任何不当的、侮辱诽谤的、淫秽的、暴力的及任何违反国家法律法规政策的内容;
  4. 4.不得利用本软件进行任何危害计算机网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器/帐户; 未经允许进入公众计算机网络或者他人计算机系统并删除、修改、增加存储信息;未经许可,企图探查、扫描、测试本软件系统或网络的弱点或其它实施破坏网络安全的行为; 企图干涉、破坏本软件系统或网站的正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称;
  5. 5.在完成注册或激活流程时,您应当按照法律法规要求,按相应页面的提示准确提供并及时更新您的资料,以使之真实、及时,完整和准确。 如有合理理由怀疑您提供的资料错误、不实、过时或不完整的,犀牛代理有权向您发出询问及/或要求改正的通知,并有权直接做出删除相应资料的处理,直至中止、终止对您提供部分或全部服务。 犀牛代理对此不承担任何责任,您将承担因此产生的任何直接或间接损失及不利后果。
  6. 6.为保障服务器的稳定和给用户一个良好的网络环境,请勿迅雷下载,在线视频等大流量操作,否则我们有权在不通知情况下禁用帐号;
  7. 7.系统可能因下列状况无法正常运作,使您无法使用各项互联网服务时,犀牛代理不承担损害赔偿责任,该状况包括但不限于: 犀牛代理在系统停机维护期间;电信设备出现故障不能进行数据传输的;因台风、地震、海啸、洪水、停电、战争、恐怖袭击等不可抗力之因素,造成犀牛代理系统障碍不能执行业务的; 由于黑客攻击、电信部门技术调整或故障、网站升级、银行方面的问题等原因而造成的服务中断或者延迟。
  8. 8.除第三方产品或服务外,本网站上所有内容,包括但不限于著作、图片、档案、资讯、资料、架构、页面设计,均由犀牛代理关联企业依法拥有其知识产权,包括但不限于商标权、专利权、著作权、商业秘密等。 非经犀牛代理或犀牛代理关联企业书面同意,任何人不得擅自使用、修改、复制、公开传播、改变、散布、发行或公开发表本网站上程序或内容; 尊重知识产权是您应尽的义务,如有违反,您应承担损害赔偿责任。
  9. 9.使用本软件必须遵守国家有关法律和政策等,维护国家利益,保护国家安全,并遵守本协议,对于用户违法或违反本协议的使用而引起的一切责任,由用户负全部责任,一概与犀牛代理动态无关,导致犀牛代理IP 加速损失的,犀牛代理有权要求用户赔偿,并有权立即停止向其提供服务,保留相关记录,保留配合司法机关追究法律责任的权利;
  10. 10.您理解并同意,犀牛代理可依据自行判断,通过网页公告、电子邮件、手机短信或常规的信件传送等方式向您发出通知,且犀牛代理可以信赖您所提供的联系信息是完整、准确且当前有效的;上述通知于发送之日视为已送达收件人。

除非本服务条款另有约定或犀牛代理与您另行签订的协议明确规定了通知方式,您发送给犀牛代理的通知,应当通过犀牛代理对外正式公布的通信地址、传真号码、电子邮件地址等联系信息进行送达。 若犀牛代理发现使用本网服务存在进行如上任意一项行为时,本网站将立即停止其使用权,并保留相关信息以追求各项法律相关责任的权利。

为您提供相关的解决办法

以下基本常见问题,如有使用问题请反馈联系我们!

  • 新闻资讯

ua和代理ip在爬虫代理中如何被设置

本文关键词:爬虫代理,代理IP


ua和代理ip在爬虫代理中如何被设置


一、设置User-Agent

1、创建Request对象时指定headers

  url = 'http://ip.zdaye.com/'

  head = {}

  head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML,  like Gecko) Chrome/18.0.1025.166  Safari/535.19'

  req = request.Request(url, headers=head)

  #传入创建好的Request对象

  response = request.urlopen(req)

  html = response.read().decode('utf-8')

  print(html)

  2、创建Request对象后使用add_header

  req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19')

  # 参数为 (key, value)

  二、代理IP设置

  使用install_opener方法之后,会将程序默认的urlopen方法替换掉。也就是说,如果使用install_opener之后,在该文件中,再次调用urlopen会使用自己创建好的opener。如果不想替换掉,只是想临时使用一下,可以使用opener.open(url),这样就不会对程序默认的urlopen有影响。

  from urllib import request

  if __name__ == "__main__":

  url = www.16yun.cn'

  #这是代理IP

  proxy = {'http':'168.68.8.88:66666'}

  #创建ProxyHandler

  proxy_support = request.ProxyHandler(proxy)

  #创建Opener

  opener = request.build_opener(proxy_support)

  #添加User Angent

  opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')]

  #安装OPener

  request.install_opener(opener)

  #使用自己安装好的Opener

  response = request.urlopen(url)

  html = response.read().decode("utf-8")

  print(html)

2019-04-26

Python爬虫实战案例:爬取爱奇艺VIP视频

本文关键词:Python爬虫,爬取爱奇艺VIP视频,代理IP
Python爬虫实战案例:爬取爱奇艺VIP视频
一.实战背景

我们把背景设置在爱奇艺的平台上面,vip视频只有充值才能看。比如加勒比海盗5的URL:http://www.iqiyi.com/v_19rr7qhfg0.html#vfrm=19-9-0-1
?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

那么我现在不先冲会员,也想免费看vip的视频应该怎么办呢?有一个简单的方式,就是通过解析网站。

URLhttp://api.xfsub.com/。解析网站为我们提供了免费的视频解析,它的通用解析方式是:

 http://api.xfsub.com/index.php?url=[播放地址或视频id]

这样,我们就可以在线观看这些VIP视频了:

?wx_fmt=jpeg

弊端是该网站只有视频的在线解析功能,没有提供下载接口,如果想下载视频,我们就要用到网络爬虫进行抓包,将视频下载下来。

二.实战升级

分析方法相同,我们使用Fiddler进行抓包:

?wx_fmt=png

在这里可以看到,有价值的请求并不多,我们逐条分析。我们先看第一个请求返回的信息。

?wx_fmt=jpeg
可以看到第一个请求是GET请求,没有什么有用的信息,继续看下一条。
?wx_fmt=jpeg

第二条GET请求地址变了,并在返回的信息中,我们看到,这个网页执行了一个POST请求。POST请求指得是什么?它与GET请求正好相反,GET是从服务器获得数据,而POST请求是向服务器发送数据,服务器再根据POST请求的参数,返回相应的内容。这个POST请求有四个参数,分别为time、key、url、type。记住这个有用的信息,我们在抓包结果中,找一下这个请求,看看这个POST请求做了什么。
?wx_fmt=jpeg
很显然,这个就是我们要找的POST请求,我们可以看到POST请求的参数以及返回的json格式的数据。其中url存放的参数如下:
    xfsub_api\/url.php?key=02896e4af69fb18f70129b6046d7c718&time=1505724557&url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rr7qhfg0.html&type=&xml=1
我们已经知道了这个解析视频的服务器的域名,再把域名加上:
    http://api.xfsub.com/xfsub_api\url.php?key=02896e4af69fb18f70129b6046d7c718&time=1505724557&url=http://www.iqiyi.com/v_19rr7qhfg0.html&type=&xml=1

这里面存放的是什么东西?不会视频解析后的地址吧?我们有浏览器打开这个地址看一下:
?wx_fmt=jpeg
果然,我们可以看到视频地址近在眼前啊,URL如下:
http://disp.titan.mgtv.com/vod.do?fmt=4&pno=1121&fid=1FEA2622E0BD9A1CA625FBE9B5A238A6&file=/c1/2017/09/06_0/1FEA2622E0BD9A1CA625FBE9B5A238A6_20170906_1_1_705.mp4
我们再打开这个视频地址:

?wx_fmt=jpeg

如此操作,我们就得到了这个视频在服务器上缓存的地址。根据这个地址,我们便可以轻松的对视频进行下载了

需要注意的一点是这些url地址具有一定的时效性,失效的时间也比较快。因为里面包含了时间信息。所以,在分析的时候,要根据自己的URL结果打开网站才能看到视频。

接下来,我们的任务就是编程实现我们所分析的步骤,根据不同的视频播放地址获得视频存放的地址。

现在梳理一下编程思路:

  • 用正则表达式匹配到key、time、url等信息。

  • 根据匹配的到信息发POST请求,获得一个存放视频信息的url。

  • 根据这个url获得视频存放的地址。

  • 根据最终的视频地址,下载视频。

三、编写代码

编写代码的时候注意一个问题,就是我们需要使用requests.session()保持我们的会话请求。简单理解就是,在初次访问服务器的时候,服务器会给你分配一个身份证明。我们需要拿着这个身份证去继续访问,如果没有这个身份证明,服务器就不会再让你访问。这也就是这个服务器的反爬虫手段,会验证用户的身份。发爬虫的限制标记就是IP地址,使用同一个IP地址反复的进行爬取,频率你太高的话很容易呢被反爬虫限制,有一个解决的方式,那就是使用代理IP,这样就可以利用不同的身份进行视频抓取了

?wx_fmt=png



2019-04-24

Python爬虫常用的小技巧-设置代理IP

本文关键词:代理IP,获取代理IP的方法,犀牛代理服务器

在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,这里讲述一个爬虫技巧,设置代理IP

这里介绍一下免费获取代理IP的方法,这个方法的优点就是免费,但是缺点就是爬取后存在很多不能用的

IP地址取自国内髙匿代理IP网站,犀牛代理,我们爬取首页IP地址就足够一般使用,或者你也可以爬取第一页,第二页…的

配置环境

  • 安装requests库
  • 安装bs4库
  • 安装lxml库

具体代码

话不多说直接上代码吧

from bs4 import BeautifulSoup
import requests
import random

def get_ip_list(url, headers):
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    ips = soup.find_all('tr')
    ip_list = []
    for i in range(1, len(ips)):
        ip_info = ips[i]
        tds = ip_info.find_all('td')
        ip_list.append(tds[1].text + ':' + tds[2].text)
    return ip_list

def get_random_ip(ip_list):
    proxy_list = []
    for ip in ip_list:
        proxy_list.append('http://' + ip)
    proxy_ip = random.choice(proxy_list)
    proxies = {'http': proxy_ip}
    return proxies

if __name__ == '__main__':
    url = 'http://www.xicidaili.com/nn/'
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'
    }
    ip_list = get_ip_list(url, headers=headers)
    proxies = get_random_ip(ip_list)
    print(proxies)

函数get_ip_list(url, headers)传入url和headers,最后返回一个IP列表,列表的元素类似122.114.31.177:808格式,这个列表包括国内髙匿代理IP网站首页所有IP地址和端口

函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险

proxies的格式是一个字典:{‘http’: ‘http://122.114.31.177:808‘},可以将下面的执行也封装为方法

对于抓取IP这个,犀牛代理服务器做了反爬处理,如果你频繁去抓取的话,服务器会主动返回503错误,提示block,所以在请求的时候可以先一次请求完保存一个文件,来读取这个文件,或者爬取一个ip使用几分钟后,再去爬取一次,相当于加一个定时功能

代理IP的使用

运行上面的代码会得到一个随机的proxies,把它直接传入requests的get方法中即可

res = requests.get(url, headers=headers, proxies=proxies)

这里想提醒的是,免费的代理IP稳定性还需要商榷,建议如何是大量的进行信息爬取的话还是购买一些代理IP比较好

2019-04-23

批量下载小说网站上的小说(python爬虫)

本文关键词:python爬虫,代理IP

批量下载小说网站上的小说(python爬虫) 
朋友要我帮忙下载小说,刚好有空就顺便着答应了,用了一个中午时间写了一个粗糙的爬虫脚本,启动发现可以运行,让脚本在这儿跑着,过一段时间之后,发现停掉了,于是debug,干掉bug之后跑起来陆续又发现几个错误,于是干脆在一些容易出错的地方,例如urlopen()请求服务器的地方,本地write()写入的地方(是的,这也会有超时错误!)加入了try-except捕获错误进行处理,另外加入了socket.timeout网络超时限制,修修补补之后总算可以顺畅的运行。

如此,运行了两天,爬虫脚本把这个小说网上的几乎所有小说都下载到了本地,一共27000+本小说,一共40G。


自此,大功告成,打包发了过去。另外说一句,百度云真坑,每次上传数量有限制,分享给朋友文件数量有限制,分享的文件夹大小也有限制,害的我还得整成压缩版才能分享。



下载界面


下面附上代码


1 #coding=utf-8
 2 import urllib
 3 import urllib2
 4 import re
 5 import os
 6 
 7 webroot = 'http://www.xuanshu.com'
 8 
 9 for page in range(20,220):
10     print '正在下载第'+str(page)+'页小说'
11     
12     url = 'http://www.xuanshu.com/soft/sort02/index_'+str(page)+'.html'
13     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'  }
14     try:
15         request = urllib2.Request(url,headers=headers)
16         response = urllib2.urlopen(request,timeout=180)
17         #print response.read()
18     except urllib2.URLError, e:
19         if hasattr(e,"code"):
20             print e.code
21         if hasattr(e,"reason"):
22             print e.reason
23 
24     html = response.read().decode('utf-8')
25     #print html
26     pattern = re.compile(u'<li>.*?<div class="s">.*?target="_blank">(.*?)</a><br />大小:(.*?)<br>.*?</em><br>更新:(.*?)</div>.*?<a href="(.*?)"><img.*?>(.*?)</a>.*?<div class="u">(.*?)</div>',re.S)
27     items = re.findall(pattern,html)
28     #print items
29 
30     for item in items:
31         try:
32             book_auther = item[0].encode('gbk')
33             book_size = item[1].encode('gbk')
34             book_updatetime = item[2].encode('gbk')
35             book_link = item[3].encode('gbk')
36             book_name = item[4].encode('gbk')
37             book_note = item[5].encode('gbk')
38             
39             book_full_link = webroot + book_link    # 构建书的绝对地址
40 
41             #请求地址
42             try:
43                 request = urllib2.Request(book_full_link,headers=headers)
44                 response = urllib2.urlopen(request,timeout=180)
45             except urllib2.URLError, e:
46                 if hasattr(e,"code"):
47                     print e.code
48                 if hasattr(e,"reason"):
49                     print e.reason
50             html = response.read().decode('utf-8')
51             #print html
52             pattern = re.compile('<a class="downButton.*?<a class="downButton" href=\'(.*?)\'.*?Txt.*?</a>',re.S)
53             down_link = re.findall(pattern,html)
54             print book_name
55             print down_link
56             
57             # down txt
58             try:
59                 request = urllib2.Request(down_link[0].encode('utf-8'),headers=headers)
60                 response = urllib2.urlopen(request,timeout=180)
61             except urllib2.URLError, e:
62                 if hasattr(e,"code"):
63                     print e.code
64                 if hasattr(e,"reason"):
65                     print e.reason
66             try:
67                 fp = open(book_name+'.txt','w')
68             except IOError,e:
69                 pattern = re.compile('<strong>.*?>(.*?)<.*?</strong>',re.S)
70                 book_name = re.findall(pattern,book_name)
71                 fp = open(book_name[0]+'.txt','w')
72             print 'start download'
73             fp.write(response.read())
74             print 'down finish\n'
75             fp.close()
76         except Exception,e:
77             print '该条目解析出现错误,忽略'
78             print e
79             print ''
80             fp = open('error.log','a')
81             fp.write('page:'+str(page)+'\n')
82             fp.write(item[4].encode('gbk'))
83             #fp.write(e)
84             fp.write('\nThere is an error in parsing process.\n\n')
85             fp.close()
86         
87  
python爬虫再爬取小说的过程中可能会出现IP的限制,可以尝试使用代理IP更换IP地址   

注意

该脚本只定向抓取“选书网”小说站,“玄幻奇幻”分类下的小说。供网友们参考,可自行修改。

2019-04-23

怎么换IP刷广告,怎么用不同的IP地址做推广?

本文关键词:自动换IP,换IP地址软件
现在网上有很多广告联盟点击,想必做网赚的朋友都很熟悉的,通过每次点击广告来获取收益的。而这个跟刷网页排名刷网页点击率那些都一样道理的,只需每次换完IP再操作网页点击即可的

步骤1
对于自动换IP刷网页点击、刷人气、刷排名及刷票等这些类似的需求,只需按照顺序编排每一步骤就行的,这里以打开百度并搜索广告内容点击这样一个过程来说明
text
2.检查一下没有切换以前的IP是多少 

text
3.首先下载使用换IP地址软件【百度搜河马代理IP】,下载安装一个,在软件上面选好一个线路连接成功以后,重新检查一下IP是否改变
text
4.确定IP改变以后,打开百度,对广告内容进行点击..其实,任务编排这个都很简单的。只需大家根据各自的实际功能需求,按照手工操作的顺序依次编排就可以的

2019-04-23

动态IP解析

本文关键词:动态IP,动态域名IP解析,
本文介绍两种方便获取主机动态IP的方式(DDNS,IP报告网页),并给出相应的代码实现.
shell脚本获取本机IP,执行上传操作和更新DNS操作.定期执行通过crontab或者systemd等服务.
应用场景

远程访问具有动态IP的公网或内网主机时,如果通过ip进行访问,由于公网IP总是在变化,我们不得不每次去查看新的ip地址,往往这个重复的过程比较麻烦.
远程主机联网的方式有所不同,主要有以下几种情形:

  1. 1.远程主机是通过PPPoE拨号上网,通常获取到动态的私有网络(内网)地址
  2. 2.远程主机直接获取到的是动态公网ipv4地址.
  3. 3.在教育网中通常还能获得动态的公网ipv6地址.

又可以简易地分成两类: 配有公网ip的主机与仅配置内网ip的主机.
内网主机访问方式

  1. 1.反向隧道
    对于躲在NAT之后的内网主机,比较方便的方式是在内网主机建立到公网主机的反向隧道,命令行建立反向隧道工具有:ssh,ngrok,tmate等,参考我之前的反向隧道的文章. 这些工具往往都能在ip发生改变后自动重建连接.
    缺点是我们需要一台拥有公网ip的主机,并且时刻保持隧道长连接,另外由于远程访问内网主机需要经过这个公网主机中转,速度变慢.

  2. 2.内网穿透

    通过公网服务器得到内网主机在NAT设备的转码地址,然后可以建立p2p的连接.QQ,TeamViewer即是类似原理.前提是内网容易穿透.

  3. 3.路由器端口映射
    外网IP和端口映射到内网:在路由器的「转发规则」页面添加外网的端口到内网某主机端口的映射.

本着只要有不断重复的麻烦事就用脚本实现的原则,我们通过一些脚本来方便我们的工作.


ddns(动态域名IP解析

IP报告/搜集脚本
IP报告脚本

通过linux的ip命令获取到本机的公网ip以及通过网站获取本机的外网ip,然后上传到自建的php服务器上.

脚本使用了本地文件记录前一次变更的ip地址,当ip发生变化才执行网络操作.文件保存在内存文件系统或临时文件中.
reportIP.sh


text

php收集脚本
提供的服务地址形式是:http://x.makefile.tk/?k=password&n=2&p0=x.x.x.x&p1=x.x.x.x,其中n是ip地址个数,p0,p1,...分别是单独的ip,参数k为了简单地防止一些人捣乱.直接访问http://x.makefile.tk/将能看到上一次保存的ip地址.

下面是index.php代码,通过文件来记录ip地址,不能够并发写入.同shell报告脚本一样可以使用内存文件来加快读写速度.


text

text
对于这种web应用,使用网络上各种php建站即可.
公共dns服务

准备:购买公网域名,域名设置DNS解析服务为Dnspod或CloudFlare.本文的代码使用CloudFlare的API动态修改DNS记录.

思路是修改IP报告脚本,将更新的IP更新的公共的DNS服务上.


ipv6-dns.sh 代码:

text
text
脚本中通过source dns.conf读取了配置信息:
text

自建dns服务

准备:外网服务器B,搭建bind9服务用来提供DNS服务

借助于IP报告/收集脚本,在服务器B上不断更新域名解析.

客户端机器C,手动设置DNS服务地址为B的IP.这种方式的优点是域名想怎么写就怎么写.

示意图:


DDNS
通过DNS服务可以实现与著名的花生壳相类似的服务,而且成本低,“自主、可控”:) 。
关于域名解析ttl
TTL是英语Time-To-Live的简称,意思为一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

如果域名的IP经常变更,那么减小TTL的值,如果很少改变,调大成几个小时都行.
将TTL设为1,表示'Automatic',如Cloudflare的DNS会在约5分钟内push出去.

IP地址变更事件通知

得到网络变化的方式有多种:

  1. C语言使用linux下的rtnetlink的NETLINK_ROUTE socket,监听之后会收到消息.要求写的程序一直在运行.参考.
  2. 如果网络管理器使用的Gnome的NetworkManager,那么会通过D-Bus广播事件(浏览器等常通过这种方式切换在线/离线模式).
  3. Debian系统中网络接口up或down时会执行/etc/network下的相关脚本.
  4. ifplugd 当网线被拔掉或接入时会执行相应脚本.

如果网络是使用NetworkManager(Ubuntu等系统默认的网络管理器)进行DHCP获取动态IP,比较方便的方式是将我们的脚本添加到事件响应脚本中. 参考man手册,在/etc/NetworkManager/dispatcher.d中添加脚本.

text
CRON定时执行
执行crontab -e将会编辑用户的crontab文件,其创建/tmp下的临时文件进行编辑,保存后将会提交到系统目录下(/var/spool/cron),这种设计方式类似visudo,目的是先检查用户的输入,防止错误的输入带来的破坏.系统重启后/tmp下的文件会删除,而crontab不会丢失.
也可以使用自定义的crontab文件导入到系统任务中:`crontab /path/to/cronfile
文件内容如下,注意使用绝对路径:

*/1 * * * /home/s05/fyk/ip/ipv6-dns.sh /home/s05/fyk/ip/dns.conf
cron job的执行命令情况可以在/var/log/syslog中看到.
使用logger 'msg'可以将msg记录到syslog文件中.
crontab无需重启会立即生效.

邮件通知
发送邮件.适合于ip更新不太频繁的情形,通过代码发送邮件的代码很简便,Python,Java等语言均有方便的实现.

2019-04-23

维护爬虫代理IP池--采集并验证

本文关键词:代理IP,免费代理IP,维护爬虫代理IP池--采集并验证

获取代理IP的途径又很多,如果你觉得那种纯免费代理IP网站获取到的代理IP不稳定的话,你可以试试,咨询客服,获取到一些质量比较好的代理IP。

用`requests`将ip地址与端口采集过来,将`IP`与`PORT`组合成`requests`需要的代理格式,用`requests`访问`[http://ipcheck.chinahosting.tk/][1]`,并判断返回的字符串是否是代理IP,若是,则代理IP有效,若不是,则代理IP无效。



代码实现

#首先,导入必要的包
import gevent.monkey
gevent.monkey.patch_socket()
import gevent
import requests
import time
from fake_useragent import UserAgent
from lxml import etree
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#定义GetProxy类
class GetProxy():
#初始化一些参数
def __init__(self):
self.ua = UserAgent()
self.check_url = 'http://ipcheck.chinahosting.tk/'
self.threads = []
self.count = 0

#定义download_page函数,用来请求一个url并且返回返回值
def download_page(self, url):
headers = {"User-Agent":self.ua.random}
response = requests.get(url)
print response.status_code
return response.content

#对页面进行数据清理
def crawl_kuaidaili(self):
for page in xrange(1,50):
url = 'https://www.kuaidaili.com/free/inha/' + str(page)
response = self.download_page(url)
soup = BeautifulSoup(response, "html.parser")
all_tr = soup.find_all('tr')
for tr in all_tr:
ip = tr.find('td',attrs={"data-title":"IP"})
port = tr.find('td',attrs={"data-title":"PORT"})
if ip==None or port==None:
pass
else:
#print "http://"+ip.get_text()+":"+port.get_text()
self.threads.append(gevent.spawn(self.valid_check, [ip.get_text(), port.get_text()]))
#print "add a task"
time.sleep(1)

#验证爬虫的有效性
def valid_check(self, *arg):
ip = arg[0][0]
port = arg[0][5]
proxyip = "http://"+ip+":"+port
proxy={"http":proxyip}
try:
response = requests.get(self.check_url, proxies=proxy, timeout=5)
#print response.content
if str(response.content) == ip:
print ip
self.count = self.count + 1
else:
pass
except:
pass

#启动爬虫
def start(self):
self.crawl_kuaidaili()
gevent.joinall(self.threads)

2019-04-22

python+selenium爬虫从零整理三

本文关键词:python+selenium爬虫,selenium的用法

认识XPath定位

我们举个例子,Chrome浏览器百度主页,右键检查元素,找到“百度一下”按钮对应的标签,对该标签右键>copy>找到Copy XPath,复制得到的XPath为//*[@id="su"],不过这仅是相对的XPath路径,完整的路径就要借助XPath Helper插件。


前面安装好XPathHelper插件后,按Shift+Ctrl+X 打开,浏览器上方会出现一个黑框;按住Shift鼠标移动到页面元素上,黑框左栏会出现该元素的完整XPath,之后用selenium定位时会用到该XPath。


如果嫌以上方式获取到XPath的绝对路径太长,可以删除部分路径,然后将最简路径复制到左栏里,右栏会显示在该页面搜索到了几个结果(即RESULTS后面的数字)以及搜到该元素显示的文本,这些就是爬虫会抓取的内容。

学习selenium的用法

1.我们先尝试用最简单的方式调用selenium模块,代码如下:

from selenium import webdriver

url = 'https://www.baidu.com'

driver = webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(8)

driver.get(url)

driver.quit()

解释:其中,第一行 from **** import **** 或者 import **** 是开头调用模块的方式;第二行 先将百度的网址以字符串的形式放入一个变量url中(为了之后修改和调用方便);第三句driver = webdriver.Chrome()是设置selenium启动Chrome浏览器;第四句driver.maximize_window()是将浏览器窗口最大化,driver.implicitly_wait(8)是设置一个等待,selenium的三种等待方式可以参考这篇博客的解释(https://blog.csdn.net/cyjs1988/article/details/76033180);driver.get(url)是控制Chrome浏览器打开url变量所属的链接,driver.quit()是关闭Chrome浏览器,最后按快捷键Ctrl + B就可以立即编译,看到运行结果。

postscript:建议读者重点百度一下显式等待方式,在加载js代码的时候做判断会比较方便。

2.尝试使用selenium查找页面元素,代码如下:

import time

from selenium import webdriver

browser = webdriver.Chrome()

time.sleep(3)

text = browser.find_element_by_id("cp").text

print(text)

browser.quit()

解释:第一行import time为使用强制等待必须先调用 time 这个库,不要问我为什么TvT;第二行from selenium import webdriver这个也是使用selenium必须的,后面就不再解释了;第三四行是使用selenium打开网址的普遍写法,感兴趣的话可百度webdriver的其它命令;第五行time.sleep(3)设置一个强制等待,括号里填几就是等几秒后继续下一步代码;第六行 设置selenium的定位方式,其它方式(具体请自行百度或

参考

)browser.find_element_by_id("cp")是通过查找html5源码里 id = cp 的标签来定位该元素,.text为获取该元素文本 (其它操作参考http://www.cnblogs.com/fnng/p/3202299.html),然后将该文本赋值给变量text;第七行print(text)打印该变量内容;最后关闭浏览器。

3.输入关键词并模拟鼠标点击,代码如下:

import time

from selenium import webdriver

browser = webdriver.Chrome()

browser.find_element_by_id('kw').send_keys("selenium")

browser.find_element_by_id("su").click()

time.sleep(5)

browser.quit()

解释:前四行指令为打开网页,第五行browser.find_element_by_id('kw')为应用ID定位找到 开头的标签,该标签对应的就是百度的搜索框输入栏,.send_keys("selenium")为向该标签对应的输入框,输入关键词selenium;第六行 同理browser.find_element_by_id("su")找到百度一下按钮所在位置,.click()为对该元素加一个单击操作,即完成了搜索过程。

2019-04-17

偶像信息如何利用代理IP进行采集 如何利用HTTP代理IP搜集明星信息?

本文关键词 :代理IP,http代理IP,犀牛代理IP

你会因为一首歌,一部电影,一个角色而喜欢一个偶像。因为喜欢他,所以想了解他很多东西。作为爬虫爱好者,如何利用所掌握的

技能适度的掌握关注偶像的信息?今天犀牛代理IP给大家将一下。第一你要掌握网络爬虫,任何语言都可以,无论是Python、java、

C++等;第二你要找到一款好用的HTTP代理IP资源,例如犀牛代理



  利用网络爬虫提出请求,通过浏览器响应需求,可以在互联网上搜集明星信息。如果遇到IP地址因访问频繁被封禁问题也不用怕,犀牛HT代理IP可以帮助我们突破IP地址限制,一步搞定IP封禁问题。利用HTTP代理IP配合网络爬虫,不仅可以搜集明星信息,互联网中很多有利资源我们都可以通过这个办法采集,简单又方便。

2019-04-17

Python3 中 reload 函数的使用

本文关键词:Python ,repeat.py 
简介
在 Python 编程中,为了便于维护,通常会把程序拆分为若干个模块(Module),在主程序中导入(import)这些模块。

模块中的内容可以是函数和类的定义,也可以是参数值的声明。

模块中的语句会且只会在第一次 import 该模块的时候被执行一次。

在实际项目中,有时会遇到这种情形:程序需要持续保持运行,而我们希望在不中断程序的前提下修改一个参数,且改动的内容能立刻影响到程序。

在这种情形下,可以使用 Python3 的 importlib 库的 reload 函数。

Python 版本:3.7.1

例子

创建一个文件夹,名为 learning 。

创建一个文件,名为 parameters.py ,内容如下:

word = 'Hello'

创建一个文件,名为 repeat.py ,内容如下:
import importlib
import time
import learning.parameters as pa

while True:
    importlib.reload(pa)
    print(pa.word)
    time.sleep(1)

执行 repeat.py ,它会每秒打印一条 word 的值。

在不停止 repeat.py 的执行的情况下,修改 parameters.py 中 word 的值,并保存。将会发现正在执行的 repeat.py 打印的信息发生了改变。

这样就实现了在程序运行中改变参数的目标。

补充
在较早的 Python 版本中,importlib 库的名称似乎是 imp ,目前版本中,imp 似乎也可以使用。

在早期的编程中,程序的参数常常放置在一个文本文件中,在程序运行中使用文件流(python 中为 open read write 等函数)的形式读取,但这会对文件中的文本的格式提出严格要求,且只能先读入字符串。

reload 函数的好处是它可以导入 Python 中的所有数据类型而不需考虑格式问题,它甚至可以在程序运行中更改某些函数和类的定义。

2019-04-16

    支付方式

    • 微信支付
    • 支付宝支付

    售后服务

    • 技术支持QQ:337292404
    • 投诉建议QQ:337292407

    商务合作

    关注微信公众号

    优惠多多

    声明:本站资源仅限用来计算机技术学习及大数据抓取、爬虫研究等合法行为。 利用本站资源从事任何违反中国法律法规的行为,由此引起的一切后果与本站无关。

    枣庄联宇商贸有限公司版权所有