在抓取一个网站的信息时,如果我们进行频繁的访问,就很有可能被网站检测到而被屏蔽,解决这个问题的方法就是使用ip代理 。在我们接入因特网进行上网时,我们的电脑都会被分配一个全球唯一地ip地址供我们使用,而当我们频繁访问一个网站时,网站也正是因为发现同一个ip地址访问多次而进行屏蔽的,所以这时候如果我们使用多个ip地址进行随机地轮流访问,这样被网站检测的概率就很小了,这时候如果我们再使用多个不同的headers,这时候就有多个ip+主机的组合,访问时被发现的概率又进一步减小了。

关于代码中ip代理的使用,下面介绍一下:

步骤:

1、urllib2库中的ProxyHandler类,通过此类可以使用ip代理访问网页

proxy_support=urllib2.ProxyHandler({}),其中参数是一个字典{‘类型':'代理ip:端口号'}

2、定制、创建一个opener

opener=urllib2.build_opener(proxy_support)

3、(1)安装opener

urlib2.install_opener(opener)

(2)调用默认的opener

opener.open(url)

对于没有设置反爬虫机制的网站,我们只需要直接像上面引入ProxyHandler类进行处理,下面以访问csdn主页为例:

[python] view plaincopy
  1. import urllib
  2. url="http://www.csdn.net/"
  3. for i in range(0,10000):
  4. html=urllib.urlopen(url)
  5. print html.info()
  6. print i

当使用上述代码时,当循环到20时,就会出现下面的错误

Traceback (most recent call last):
  File "C:/Users/lenovo/PycharmProjects/untitled1/jt2/__init__.py", line 19, in <module>
    html=urllib.urlopen(url)
  File "C:\Python27\lib\urllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:\Python27\lib\urllib.py", line 213, in open
    return getattr(self, name)(url)
  File "C:\Python27\lib\urllib.py", line 350, in open_http
    h.endheaders(data)
  File "C:\Python27\lib\httplib.py", line 997, in endheaders
    self._send_output(message_body)
  File "C:\Python27\lib\httplib.py", line 850, in _send_output
    self.send(msg)
  File "C:\Python27\lib\httplib.py", line 812, in send
    self.connect()
  File "C:\Python27\lib\httplib.py", line 793, in connect
    self.timeout, self.source_address)
  File "C:\Python27\lib\socket.py", line 571, in create_connection
    raise err
IOError: [Errno socket error] [Errno 10060]

这就是因为我们使用了计算机的单一ip进行频繁访问而被检测出来的。

下面是使用了ip代理的代码:

[python] view plaincopy
  1. import urllib2
  2. import random
  3. def getHtml(url,proxies):
  4. random_proxy = random.choice(proxies)
  5. proxy_support = urllib2.ProxyHandler({"http":random_proxy})
  6. opener = urllib2.build_opener(proxy_support)
  7. urllib2.install_opener(opener)
  8. html=urllib2.urlopen(url)
  9. return html
  10. url="http://www.csdn.net/"
  11. proxies=["101.53.101.172:9999","171.117.93.229:8118","119.251.60.37:21387","58.246.194.70:8080"
  12. "115.173.218.224:9797","110.77.0.70:80"]
  13. for i in range(0,10000):
  14. try:
  15. html=getHtml(url,proxies)
  16. print html.info()     #打印网页的头部信息,只是为了展示访问到了网页,可以自己修改成想显示的内容
  17. print i
  18. except:
  19. print "出现故障"

这个代码我测试是在1096次时被检测到了,要知道我的列表中只有6个ip,如果我们增加ip的个数,那么被发现的概率是不是又会更低了。对于上面的例子中的ip代理,有可能在过了一段时间后便不能用了,这个需要自己到网上搜索最新的ip代理,进行替换。还有程序中的异常处理是为了使程序能够处理ip代码访问时出现问题的情况,因为有些ip代理在访问的时候会出现故障的,这样做了可以使程序更加健壮。

对于有反爬虫机制的网页,下面还是以访问csdn中的博客为例:

[python] view plaincopy
  1. #coding:utf-8
  2. import urllib2
  3. import random
  4. def get_html(url,headers,proxies):
  5. random_userAget = random.choice(headers)
  6. random_proxy = random.choice(proxies)
  7. #下面是模拟浏览器进行访问
  8. req = urllib2.Request(url)
  9. req.add_header("User-Agent", random_userAget)
  10. req.add_header("GET", url)
  11. req.add_header("Host", "blog.csdn.net")
  12. req.add_header("Referer", "http://blog.csdn.net/?&page=6")
  13. #下面是使用ip代理进行访问
  14. proxy_support = urllib2.ProxyHandler({"http":random_proxy})
  15. opener = urllib2.build_opener(proxy_support)
  16. urllib2.install_opener(opener)
  17. html = urllib2.urlopen(req)
  18. return html
  19. url = "http://blog.csdn.net/?&page=3"
  20. """
  21. 使用多个主机中的user_agent信息组成一个列表,当然这里面的user_agent都是残缺的,大家使用时可以自己找
  22. 身边的小伙伴借呦
  23. """
  24. user_agents = [
  25. "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWe。。。hrome/45.0.2454.101 Safari/537.36",
  26. "Mozilla / 5.0(Windows NT 6.1) AppleWebKit / 537.。。。。likeGecko) Chrome / 45.0.2454.101Safari/ 537.36",
  27. "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit。。。。。Gecko) Chrome/50.0.2661.102 Safari/537.36",
  28. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.3。。。。ML, like Gecko) Chrome/49.0.2623.112 Safari/537.36",
  29. "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) 。。。WebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586",
  30. "User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKi。。。。。36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586",
  31. "Mozilla/5.0 (Windows NT 10.0; WOW64) Apple。。。。。KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"
  32. ]
  33. #网上的ip有可能是不能用的,需要多做尝试
  34. myproxies=["220.189.249.80:80","124.248.32.43:80"]
  35. html = get_html(url,user_agents,myproxies)
  36. print html.read()

对于上面代码中的关于模拟浏览器的部分可以参照我的上一篇博客:http://blog.csdn.net/qq_29883591/article/details/52006624

转载于:https://www.cnblogs.com/SofuBlue/p/8031812.html

python使用ip代理抓取网页相关推荐

  1. python通过代理访问网页_Python使用PyCurl通过SOCK5代理抓取网页 - Python - 服务器之家...

    Python使用PyCurl通过SOCK5代理抓取网页 发布时间:2013-10-09

  2. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  3. python中模拟浏览器抓取网页(-)

    对于平时我们抓取网页的内容时,比较倾向于直接利用urllib进行抓取(这里我就基于python的2.7版本进行解说,对于python3之后的版本,是将python中的urllib和urllib2和并成 ...

  4. Python小应用1 - 抓取网页中的链接地址

    看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具.正好我刚学习Python,就决定自己练习一下.写了一下,原本觉得很简单的东西,搞了半天才 ...

  5. Python案例学习:抓取网页表格数据解析并写入Excel

    三年多没写博客了,原因是因为我转行了,经历了很长的低谷,那段时间从不看博客,今天打开来看,回复了一些评论,很抱歉,有些网友的评论没有及时回复.最近开始想写代码了~ 最近看基金股票,想抓取一些行业当天的 ...

  6. python beautifulsoup多线程分析抓取网页

    下面的代码用到了 1 python 多线程 2 网页分析库:beautifulsoup ,这个库比之前分享的python SGMLParser 网页分析库要强大很多,大家有兴趣可以去了解下. #enc ...

  7. python 示列:抓取网页所有a连接

    如果我们编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓回来,第二步是分析网页内容,看到底是新闻.图片或是视频. 接下来的示例展示分为2个步骤 1.获取目标网页的内容 2.屏幕输出网页中所有的< ...

  8. python爬虫搜特定内容的论文_python基于BeautifulSoup实现抓取网页指定内容的方法...

    python基于BeautifulSoup实现抓取网页指定内容的方法 更新时间:2015年07月09日 10:12:50 作者:光索与诺 这篇文章主要介绍了python基于BeautifulSoup实 ...

  9. 利用Crowbar抓取网页异步加载的内容 [Python俱乐部]

    利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 [Python俱乐部] 利用Crowbar抓取网页异步加载的内容 在做 Web 信息提取.数 ...

  10. Linux 抓取网页实例(shell+awk)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 上一篇博 ...

最新文章

  1. 如何为Android上的产品设计一款合适的图标
  2. .NET chart 毫秒级坐标轴
  3. 小波的秘密10_小波包的数学支撑
  4. PP视频如何更改截图保存路径及图片类型
  5. Python基础闯关失败总结
  6. Memcache 客户端
  7. JAVA日期查询:季度、月份、星期等时间信息
  8. Java中函数参数不固定的问题
  9. yum提示“Cannot retrieve metalink for repository: epel/x86_64” 解决方法
  10. MAC下安装和管理java
  11. pb5.0-pb10.0各版本高速下载
  12. 软件测试培训费多少钱?贵吗?靠谱吗?
  13. Python生成验证码图片及验证用户提交的验证码是否正确
  14. Phonetic symbol 辅音 - 清辅音 -- /f/
  15. 微信小程序里面的单步调试和变量查看
  16. Oracle session active 和 inactive 状态 说明
  17. Java中的正无穷,负无穷和非数
  18. 软件破解中常用API
  19. 东大22春政治学概论X《政治学概论》在线平时作业2_100分满分非答案
  20. 深信服服务器装系统,深信服新上网行为管理系统安装调试手册..doc

热门文章

  1. [bzoj 1030][JSOI2007]文本生成器
  2. 常用Docker 镜像命令(二)
  3. 没有Angular 3,下一个Angular主版本将是Angular 4
  4. 让代码在SharePoint页面执行如何在aspx页面中写代码
  5. 在小榕的论坛看的一篇关于DOS批处理命令的文章
  6. Sharepoint Portal Server 2005?
  7. SOLR对多个(关联)表创建索引
  8. 网传快手大幅度裁员30%
  9. 字节一面,面试官拿System.out.println()考了我半个小时?我懵逼了...
  10. 微信技术总监周颢:一亿用户背后的架构秘密