IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python-爬虫项目<实现增加博客访问量> -> 正文阅读

[Python知识库]python-爬虫项目<实现增加博客访问量>

一、整体思路

??如题,通过这个项目实现的目标是增加博客访问量的功能。那我们如何实现这个目标呢?
??访问量就是我们通过浏览器或者手机APP将对应的文章点开,这样的一个步骤。那我们是不是可以通过python模拟我们的行为,达到增加访问量的效果呢?说干就干!我们冲!
??想要模拟我们的行为,那我们需要准备什么呢?首先对应的文章URL总是需要的吧?然后为了模仿浏览器的行为,也是为了告诉服务器我们是正常用户我们是不是需要对请求包的header进行封装呢?最后为了表现出不是同一个人在访问,我们是不是应该封装一个代理IP呢?
??到这里,我们整理一下我们的需求!1、目标URL2、伪装header3、代理IP4、模仿行为访问。既然需求明确了,那我们就准备开始吧。
??123我们都得做,那我们先完成3吧。

二、获取伪装的header,

??通过网上浏览信息,我们找到了这样一个网址https://www.cnblogs.com/0bug/p/8952656.html#_label1,如下图:
在这里插入图片描述
??不需要爬取,咱直接复制粘贴即可!
??在代码的目录下创建"User-Agent.txt.txt"文件,然后将下列内容粘贴进去即可:

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
Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3

三、爬取代理IP

??通过网上浏览信息,我们找到了这样一个网址https://www.kuaidaili.com/free/inha/,如下图:
在这里插入图片描述
??直接爬取他的IP不就可以了吗?说干就干!!
??源码如下:

import requests
from bs4 import BeautifulSoup
import codecs
from tqdm import tqdm
import random
import re

def main(url):
    # 获取代理header和ip
    header = head()
    ip = ipProxies()
    # 爬取网页
    html = getURL(url,header,ip)
    # 提取内容
    result = getResult(html)
    # 保存结果
    saveResult(result)
def ipProxies():
    f = codecs.open("IP.txt", "r+", encoding="utf-8")
    ip = f.readlines()
    f.close()
    IP = {'http':random.choice(ip)[-2::-1][::-1]}
    print("本次使用IP(proxies)为:",IP['http'])
    return IP

def head():
    f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
    head = f.readlines()
    f.close()
    header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
    print("本次使用header(User-Agent)为:", header["User-Agent"])
    return header

def getURL(url,header,ip):
    html = ""
    try:
        response = requests.get(url=url,headers=header,proxies=ip)
        html = response.text
    except:
        print("url出错啦!")
    return html

def getResult(html):
    # 解析网页内容
    bs = BeautifulSoup(html,"html.parser")
    # 正则匹配IP地址
    pantter = '(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])'
    # 搜索文档得到结果
    result = bs.find_all(text= re.compile(pantter))
    return result


def saveResult(result):
    f = codecs.open("IP.txt",'w+',encoding="utf-8")
    for ip in tqdm(result,desc="内容爬取中",ncols=70):
        f.write(ip)
        f.write("\n")
    f.close()

if __name__ == '__main__':
    url = "https://www.kuaidaili.com/free/inha/"
    print("-------------------开始爬取------------------------")
    # 调取主函数
    main(url)
    print("-------------------爬取完成------------------------")
    print("^-^结果存在于同本代码目录下的'IP.txt'文件中^-^")

??代码我就不过多解释,若此代码第一次不能运行,应该是你的没有“IP.txt”文件。
??解决办法:在和本代码的目录下创建"IP.txt"文件,然后将你本机的IP写在这个txt文件中即可。

四、获取目标URL

??这个可以参考这篇文章:prthon-爬虫实现爬取某用户csdn博客所有文章链接
??在这里当然我们也会给出我们在这的代码,源码如下:干!

import requests
import random
from bs4 import BeautifulSoup
import codecs
from tqdm import tqdm
import sys

def main(url):
    # 获取代理header和ip
    header = head()
    ip = ipProxies()
    # 爬取网页
    html = getURL(url,header,ip)

    # 提取内容
    result = getResult(html)

    # 保存结果
    saveResult(result)

# 获取随机IP
def ipProxies():
    f = codecs.open("IP.txt", "r+", encoding="utf-8")
    ip = f.readlines()
    f.close()
    IP = {'http':random.choice(ip)[-2::-1][::-1]}
    print("本次使用IP(proxies)为:",IP['http'])
    return IP

# 获取随机header头
def head():
    f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
    head = f.readlines()
    f.close()
    header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
    print("本次使用header(User-Agent)为:", header["User-Agent"])
    return header

# 获取页面
def getURL(url,header,ip):
    html = ""
    try:
        response = requests.get(url=url,headers=header,proxies=ip)
        html = response.text
    except:
        print("目标URL有误")

    return html


# 获取所需要的页面(HTML)文件
def getResult(html):
    result = []
    bs = BeautifulSoup(html,"html.parser")
    for link in bs.find_all('a'):
        getlink = link.get('href')
        try:
            if ("comments" not in getlink) and("/article/details/" in getlink) and ("blogdevteam" not in getlink):
                if (getlink not in result):
                    result.append(getlink)
        except TypeError as e:
            print("这是警告,只是小异常,罩得住!还在爬取,别担心!冲!!!!")
            continue
    return result

# 保存爬取结果URL
def saveResult(result):
    f = codecs.open('url.txt','w+',encoding='utf-8')
    for link in tqdm(result,desc="本页面爬取中",ncols=70):
        f.write(link)
        f.write("\n")
    f.close()

# 函数入口
if __name__ == '__main__':
    # 获取用户所需爬取的页面
    url = str(input("请输入需要爬取的URL:"))
    # 判断用户输入是否合法
    if "blog.csdn.net" not in url:
        print("请输入合法的CSDN博客主页链接")
        sys.exit()
    print("-------------------开始爬取------------------------")
    # 调取主函数
    main(url)
    print("-------------------爬取完成------------------------")
    print("^-^结果存在于同本代码目录下的'url.txt'文件中^-^")

??到这里,我们的准备工作已经齐活啦!运行完本代码以后,你的目前路径有如下图的5个文件:
在这里插入图片描述
??如果没有,那前边肯定有问题,不用接着做了。

五、模拟访问,增加访问量!

??准备已经做好啦,成败在此一举!
??别担心,既然文章已经出现在这里了,那肯定是成功了。
??废话不多说,上码:

import requests
import codecs
from tqdm import tqdm
import random
import time

def main():
    # 获取代理header和ip
    header = head()
    ip = ipProxies()

    # 获取目标URL,随机访问一篇博客
    url = getURL()

    # 访问URL
    return askURL(url,header,ip)

def ipProxies():
    f = codecs.open("IP.txt", "r+", encoding="utf-8")
    ip = f.readlines()
    f.close()
    IP = {'http':random.choice(ip)[-2::-1][::-1]}
    print("本次使用IP(proxies)为:",IP['http'])
    return IP

def head():
    f = codecs.open("User-Agent.txt","r+",encoding="utf-8")
    head = f.readlines()
    f.close()
    header = {"User-Agent":random.choice(head)[-3::-1][::-1]}
    print("本次使用header(User-Agent)为:", header["User-Agent"])
    return header

def getURL():
    f = codecs.open("url.txt","r+",encoding="utf-8")
    URL = f.readlines()
    f.close()
    url = random.choice(URL)[-2::-1][::-1]
    print("本次使用访问的链接为:", url)
    return url

def askURL(url,header,ip):
    try:
        request = requests.get(url=url,headers=header,proxies=ip)
        print(request)
        time.sleep(5)
    except:
        print("本次访问失败!")

if __name__ == '__main__':
	# 获取模拟访问的次数
	num = int(input("请输入模拟访问次数:"))
    for num in tqdm(range(num),desc="正在访问",ncols=70):
        print("这是第"+str(num+1)+"次访问")
        main()

??到这里本项目的目标我们已经实现了!接下里就是紧张刺激的验证环节。

六、验证环节

??最终运行结果如下:
在这里插入图片描述
??由此,本项目功成!结束!

七、使用方法以及结语

??使用方法很简单,把他们全部放在一个文件夹里面就行。
??欢迎关注,点赞。与我交流一同学习python、Django、爬虫、docker、路由交换、web安全等一切东西。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:36:25  更:2021-07-25 11:36:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 4:58:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码