您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

python:教你用爬虫通过代理自动刷网页的浏览量

时间:2019-08-26 15:18:25  来源:  作者:

python:教你用爬虫通过代理自动刷网页的浏览量

 

 

前言

每当看到几十万的阅读量的文章后面区区几个评论, 心中就在想, 难道大家现在都这么懒了吗? 但是有些文章阅读量不高, 评论为什么这么多呢?

我想这些应该都是刷的, 不光浏览量是刷的, 甚至那些无厘头的评论都是刷的。有人要问了, 你凭什么说别人刷的评论呢? 难道评论还可以刷? 我想说是的。

比如:我们在浏览微博的时候,会经常发现一件事, 怎么每个微博下面都有这个人的小广告呢? 难道这人都这么闲吗? 一个人闲也就罢了, 怎么这么多人都闲?可以在大量的微博下面评论大量的小广告, 并且点赞还非常多。具体是不是刷的,自己做判断就好了。

今天教大家的是, 用爬虫通过代理来增加网页的浏览量。以下是干货↓

思路

一、怎么获取大量的代理IP?

给大家推荐一个网站https://www.xicidaili.com/ , 看到下面的图片, 应该明白我们要做什么了吧。我们可以写一个爬虫去抓取这些IP。

 

python:教你用爬虫通过代理自动刷网页的浏览量

 

 

但是, 在实际运行的时候, 发现了一个问题, 我怎么才能知道这些IP有用, 并且代理设置成功了呢? 当然, 也是有解决方案的,我们可以用代理访问这个网站http://httpbin.org/ip ,如果不正常会抛出异常, 如果是正常的就会返回如下信息

  •  
{
 "origin": "106.38.91.34, 106.38.91.34"
}

废话不多说,直接上代码:

  •  
from bs4 import BeautifulSoup
import requests
import random
import time
def download_page(url):
 print(url)
 try:
 #User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、
 #浏览器渲染引擎、浏览器语言、浏览器插件等。
 header = {
 "User-Agent":"Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/59.0.3071.104 Safari/537.36"
 }
 data = requests.get(url,headers=header).text
 except HTTPError as err:
 print(err.__traceback__)
 except ConnectionError as err:
 print(err.__traceback__)
 except TimeoutError as err:
 print(err.__traceback__)
 return data
#获取当前首页的内容
def parse_proxy_html(html):
 try:
 #解析器html.parser lxml xml html5lib
 soup = BeautifulSoup(html, 'lxml')
 find_all = soup.find_all('tr')
 f = open("proxy", "w")
 for find_tr in find_all:
 find_tds = find_tr.find_all('td')
 if len(find_tds) == 0:
 continue
 ip_temp = find_tds[1].contents[0]+":"+find_tds[2].contents[0]
 try:
 #随机模拟一个用户
 user_agent = {'User-Agent':random.choice(agent_list)}
 #随机获取一个代理ip
 proxies = {'http':ip_temp}
 #这样写没有问题,但是抓取出来的ip大都没有用
 #判断代理ip是否有用,只保存有用的代理ip,两秒不响应就算无效的ip
 targetUrl = 'http://httpbin.org/ip'
 resp = requests.get(targetUrl, headers=user_agent,proxies=proxies,timeout=2)
 print(resp.status_code)
 print(resp.text)
 print('~~有效的~~代理ip和端口号%s'%ip_temp)
 f.write(ip_temp+"n")
 except Exception as e:
 print('~~异常:%s'%e) 
 print('~~无效的~~代理ip和端口号%s'%ip_temp)
 #获取下个页面地址
 next_a = soup.find('a',attrs={'rel': 'next'})
 if next_a is None:
 print("~~None~~~")
 return "";
 return next_a['href']
 except Exception as ex:
 print('抓取信息异常:'+ex)
#首页数据抓取
HTTP = 'https://www.xicidaili.com'
def to_proxy_page():
 download_url = '/wt/1'
 num = 1
 while download_url != 'JAVAscript:;' and download_url!='':
 if num == 3:
 print('~~~~够用了~~不抓取了~~~')
 break
 print("第%d次请求地址:%s"%(num,download_url));
 #随机停顿几秒
 i = random.randint(1, 3)
 time.sleep(i)
 #获取页面信息
 html = download_page(HTTP + download_url)
 #解析和保存
 download_url = parse_proxy_html(html)
 num = num+1;
 
if __name__ == '__main__':
 to_proxy_page()

获取到的代理地址格式如下(想要多少, 代码自己设置下就好了):

163.204.243.4:9999

60.13.42.248:9999

二、通过代理地址去刷新网页

可以先写一个User-Agent列表, 模拟不同的浏览器信息。然后配置需要刷新的网页就好了。

  •  
import random
import socket
import requests
#定义需要刷新的页面集合
refreshPage_list = [
 #1062
 'https://blog.csdn.net/dujianxiong/article/details/80844652',
 #153
 'https://blog.csdn.net/super_DuoLa/article/details/90205512'
 ]
#定义User-Agent集合
agent_list = [
 #Win7:
 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
 #Win7:
 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
 #Win7:
 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
 #Win7:
 'Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50',
 #Win7+ie9:
 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)',
 #Win7+ie8:
 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)',
 #WinXP+ie8:
 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)',
 #WinXP+ie7:
 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
 #WinXP+ie6:
 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
 #傲游3.1.7在Win7+ie9,高速模式:
 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12',
 #傲游3.1.7在Win7+ie9,IE内核兼容模式:
 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)',
 #搜狗3.0在Win7+ie9,IE内核兼容模式:
 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)',
 #搜狗3.0在Win7+ie9,高速模式:
 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0',
 #360浏览器3.0在Win7+ie9:
 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)',
 #QQ浏览器6.9(11079)在Win7+ie9,极速模式:
 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201',
 #QQ浏览器6.9(11079)在Win7+ie9,IE内核兼容模式:
 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201',
 #阿云浏览器1.3.0.1724 Beta(编译日期2011-12-05)在Win7+ie9:
 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'
 ] 
#开始搞
def to_refresh_page():
 try:
 #获取代理信息
 f = open("proxy",'r')
 lines = f.readlines()
 proxys = []
 for line in lines:
 ip = line.strip()
 proxys.append(ip)
 #每个页面刷新10次
 for i in range(10):
 for url in refreshPage_list:
 #随机模拟一个用户
 user_agent = {'User-Agent':random.choice(agent_list)}
 #随机获取一个代理ip
 proxies = {'http':random.choice(proxys)}
 r = requests.get(url,headers=user_agent,proxies=proxies)
 print(r)
 print('刷新成功,请求地址url:%s返回状态status:%s'%(url,r.status_code))
 except Exception as e:
 print('刷新页面异常:%s'%e)
 
if __name__ == '__main__':
 to_refresh_page()

代码中我加了很多注解,就不长篇大论了,如果有不明白的可以评论。

三、思考问题

在实际测试中,发现刚才还有效的代理IP,当去刷新网页的时候就链接超时了呢?为什么请求了很多次,网页的浏览量并没有涨太多呢?

注: 文章所写代码仅用于技术交流



Tags:python 爬虫   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
爬虫应用的广泛,例如搜索引擎、采集数据、广告过滤、数据分析等。当我们对少数网站内容进行爬取时写多个爬虫还是有可能的,但是对于需要爬取多个网站内容的项目来说是不可能编写多个爬虫的,这个时候我们就需要智能爬虫。...【详细内容】
2019-10-18  Tags: python 爬虫  点击:(94)  评论:(0)  加入收藏
前言每当看到几十万的阅读量的文章后面区区几个评论, 心中就在想, 难道大家现在都这么懒了吗? 但是有些文章阅读量不高, 评论为什么这么多呢?我想这些应该都是刷的, 不光...【详细内容】
2019-08-26  Tags: python 爬虫  点击:(585)  评论:(0)  加入收藏
这是最简单的Python爬虫案例,如果你能看懂,那么请你保持信心,因为你已经入门Python爬虫,只要带着信心和努力,你的技术能力在日后必定价值15K月薪。 这次是要爬取网易新闻,包括新闻...【详细内容】
2019-08-09  Tags: python 爬虫  点击:(298)  评论:(0)  加入收藏
很多时候我们做 Python 爬虫时或者自动化测试时需要用到 selenium 库,我们经常会卡在登录的时候,登录验证码是最头疼的事情,特别是如今的文字验证码和图形验证码。文字和图形验证码还加了干扰线,本文就来讲讲怎么绕过登录...【详细内容】
2019-08-05  Tags: python 爬虫  点击:(311)  评论:(0)  加入收藏
目标场景在移动互联网时代,很大一部分企业抛弃了传统的网站,选择将数据、服务整合到 App 端,因此 App 端无论是爬虫还是反反爬都显得尤为重要。常见的 App 端的爬虫方式是利用...【详细内容】
2019-07-24  Tags: python 爬虫  点击:(342)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条