'python:教你用爬蟲通過代理自動刷網頁的瀏覽量'

"


"


python:教你用爬蟲通過代理自動刷網頁的瀏覽量


前言

每當看到幾十萬的閱讀量的文章後面區區幾個評論, 心中就在想, 難道大家現在都這麼懶了嗎? 但是有些文章閱讀量不高, 評論為什麼這麼多呢?

我想這些應該都是刷的, 不光瀏覽量是刷的, 甚至那些無厘頭的評論都是刷的。有人要問了, 你憑什麼說別人刷的評論呢? 難道評論還可以刷? 我想說是的。

比如:我們在瀏覽微博的時候,會經常發現一件事, 怎麼每個微博下面都有這個人的小廣告呢? 難道這人都這麼閒嗎? 一個人閒也就罷了, 怎麼這麼多人都閒?可以在大量的微博下面評論大量的小廣告, 並且點贊還非常多。具體是不是刷的,自己做判斷就好了。

今天教大家的是, 用爬蟲通過代理來增加網頁的瀏覽量。以下是乾貨↓

思路

一、怎麼獲取大量的代理IP?

給大家推薦一個網站https://www.xicidaili.com/ , 看到下面的圖片, 應該明白我們要做什麼了吧。我們可以寫一個爬蟲去抓取這些IP。


"


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,當去刷新網頁的時候就鏈接超時了呢?為什麼請求了很多次,網頁的瀏覽量並沒有漲太多呢?

注: 文章所寫代碼僅用於技術交流

"

相關推薦

推薦中...