利用爬虫提高博客访问量

  • 上篇文章我们实现了如何构建自己的IP代理池, 现在我们使用这个代理池来对博客进行访问,提高博客访问量.(注:如果随机出来的代理IP阵亡了话,那不用说访问肯定失败了)
  • 源代码:
import random
import threading
import time
import requests
from pymongo import MongoClient
import my_fake_useragent as ua

conn = MongoClient('127.0.0.1', 27017)
db = conn['proxy']    # 选择或者创建数据库proxy, 也可以写成conn.proxy
mongo_proxy = db['proxy']    # 选择或者创建集合good_proxy, 也可以写成db.good_proxy
proxy_data = mongo_proxy.find()   # 查询所有数据, 返回的是一个列表
proxy_list = []    # 创建一个列表来存放ip地址

for ip in proxy_data:
    # ip为字典
    proxy_list.append(ip['ip'])


def access(proxy, i):
    try:
        # 随机生成一个User-Agent, 不生成手机类型的
        UserAgent = ua.UserAgent(phone=False)
        # 访问csdn博客
        url = r'https://blog.csdn.net/ROK_LI/article/details/91394774'

        headers = {
            'User-Agent': UserAgent.random()
        }
        response = requests.get(
            url=url,
            headers=headers,
            proxies={
                'http': f'http://{proxy}',
                'https': f'https://{proxy}'
            },
            timeout=15,
        )
        # if response.status_code == 200:
        # with open('ip.html', 'w', encoding='utf8') as f:
        #     f.write(response.text)
        # print(f'第{i}访问成功!')
        # else:
        #     print('连接失败!')

        if response.status_code != 200:
            print(f'第{i}次访问失败!')
        response.close()
        time.sleep(5)
    except:
        print(f'第{i}次访问失败')


if __name__ == '__main__':
    # 线程池
    tasks = []
    # 创建多线程
    for i in range(500):
        ip = random.choice(proxy_list)  # 随机从列表proxy_list中取出一个ip
        # access(ip, i)
        task = threading.Thread(target=access, args=(ip, i,))
        tasks.append(task)
        task.start()
    for j in tasks:
        j.join()



你可能感兴趣的:(爬虫学习)