这是一个分析IP代理网站,通过代理网站提供的ip去访问CSDN博客,达到以不同ip访同一博客的目的,以娱乐为主,大家可以去玩一下。

首先,准备工作,设置User-Agent:

#1.headers
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'}

然后百度一个IP代理网站,我选用的是https://www.kuaidaili.com/free,解析网页,提取其中的ip、端口、类型,并以list保存:

#1.获取IP地址
html=requests.get('https://www.kuaidaili.com/free').content.decode('utf8')
tree = etree.HTML(html)
ip = tree.xpath("//td[@data-title='IP']/text()")
port=tree.xpath("//td[@data-title='PORT']/text()")
model=tree.xpath("//td[@data-title='类型']/text()")

接着分析个人博客下的各篇文章的url地址,以list保存

#2.获取CSDN文章url地址   ChildrenUrl[]
url='https://blog.csdn.net/weixin_43576564'
response=requests.get(url,headers=headers)
Home=response.content.decode('utf8')
Home=etree.HTML(Home)
urls=Home.xpath("//div[@class='article-item-box csdn-tracking-statistics']/h4/a/@href")
ChildrenUrl=[]

然后通过代理ip去访问个人博客的各篇文章,通过for循环,一个ip将所有文章访问一遍,通过解析"我的博客"网页,获取总浏览量,实时监控浏览量是否发生变化,设置任务数,实时显示任务进度,通过random.randint()设置sleep时间,使得spider更加安全。全代码如下:

import os
import time
import random
import requests
from lxml import etree
#准备部分
#1.headers
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'} #1.获取IP地址
html=requests.get('https://www.kuaidaili.com/free').content.decode('utf8')
tree = etree.HTML(html)
ip = tree.xpath("//td[@data-title='IP']/text()")
port=tree.xpath("//td[@data-title='PORT']/text()")
model=tree.xpath("//td[@data-title='类型']/text()") #2.获取CSDN文章url地址 ChildrenUrl[]
url='https://blog.csdn.net/weixin_43576564'
response=requests.get(url,headers=headers)
Home=response.content.decode('utf8')
Home=etree.HTML(Home)
urls=Home.xpath("//div[@class='article-item-box csdn-tracking-statistics']/h4/a/@href")
ChildrenUrl=[]
for i in range(1,len(urls)):
ChildrenUrl.append(urls[i]) oldtime=time.gmtime() browses=int(input("输入需要访问次数:"))
browse=0
#3.循环伪装ip并爬取文章
for i in range(1,len(model)):
#设计代理ip
proxies={model[i]:'{}{}'.format(ip[i],port[i])}
for Curl in ChildrenUrl:
try:
browse += 1
print("进度:{}/{}".format(browse,browses),end="\t")
#遍历文章
response=requests.get(Curl,headers=headers,proxies=proxies)
#获取访问人数
look=etree.HTML(response.content)
Nuwmunber=look.xpath("//div[@class='grade-box clearfix']/dl[2]/dd/text()")
count=Nuwmunber[0].strip()
print("总浏览量:{}".format(count),end="\t")
''' 重新实现 #每个IP进行一次查询
if Curl==ChildrenUrl[5]:
ipUrl='http://www.ip138.com/'
response=requests.get(ipUrl,proxies=proxies)
iphtml=response.content
ipHtmlTree=etree.HTML(iphtml)
ipaddress=ipHtmlTree.xpath("//p[@class='result']/text()")
print(ip[i],ipaddress)
'''
i = random.randint(5, 30)
print("间隔{}秒".format(i),end="\t")
time.sleep(i)
print("当前浏览文章地址:{}".format(Curl))
if browse == browses:
print("已完成爬取任务,共消耗{}秒".format(int(time.perf_counter())))
os._exit(0) except:
print('error')
os._exit(0) #打印当前代理ip
print(proxies)

实际运行效果图:

最新文章

  1. PHP常用函数总结(不定期更新)
  2. selenium—八种定位方法
  3. go语言最新版本 下载地址
  4. Java练习之最大相同子串
  5. POJ1986 DistanceQueries 最近公共祖先LCA 离线算法Tarjan
  6. 本地开发 localhost链接数据库比127.0.0.1慢
  7. jmeter参数化数据(_csvread函数、用户自定义变量等)
  8. Js闭包的用途
  9. Monit : 开源监控工具介绍
  10. LVS+keepalived负载均衡
  11. 【mongoDB查询进阶】聚合管道(三)--表达式操作符
  12. 【转】VMware 全屏显示
  13. 学习率设置&&训练模型之loss曲线滑动平均
  14. mysql性能调整三板斧
  15. 运行./build.sh出现错误:bash: ./build.sh: Permission denied
  16. tensorflow 在同一个GPU同时加载多张相同的图
  17. Shell中的case命令
  18. Java:集合,对列表(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法
  19. Cookie 和 Session机制具体解释
  20. 1044 Shopping in Mars (25 分)

热门文章

  1. spring boot之actuator简介
  2. 常用的HTTP状态代码(4xx、5xx)详解
  3. 查看weblgic/Tuxedo/WebSpere(WAS)/Tomcat中间件版本
  4. Junit4使用详解二:Junit4运行流程
  5. 【设计模式】行为型04迭代器模式(Iterator Pattern)
  6. Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析
  7. 渐进式web应用开发---service worker (二)
  8. Win32小游戏--蜘蛛纸牌
  9. 研究Electron主进程、渲染进程、webview之间的通讯
  10. vue项目缓存最佳实践