Python 爬虫实现增加播客访问量的方法实现


Posted in Python onOctober 31, 2019

一、序言:

世界 1024 程序猿节日不加班,闲着没事儿。。。随手写了个播客访问量爬虫玩玩,访问量过万不是事儿!!!每个步骤注释都很清晰,代码仅供学习参考!

---- Nick.Peng

二、所需环境:

Python3.x
相关模块: requests、json、lxml、urllib、bs4、fake_useragent

三、增加Blog访问量代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Nick
# @Date:  2019-10-24 15:40:58
# @Last Modified by:  Nick
# @Last Modified time: 2019-10-24 16:54:31
import random
import re
import time
import urllib
import requests

from bs4 import BeautifulSoup
from fake_useragent import UserAgent

try:
  from lxml import etree
except Exception as e:
  import lxml.html
  # 实例化一个etree对象(解决通过from lxml import etree导包失败)
  etree = lxml.html.etree

# 实例化UserAgent对象,用于产生随机UserAgent
ua = UserAgent()


class BlogSpider(object):
  """
  Increase the number of CSDN blog visits.
  """

  def __init__(self):
    self.url = "https://blog.csdn.net/PY0312/article/list/{}"
    self.headers = {
      "Referer": "https://blog.csdn.net/PY0312/",
      "User-Agent": ua.random
    }
    self.firefoxHead = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
    self.IPRegular = r"(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])"

  def send_request(self, num):
    """
    模拟浏览器发起请求
    :param num: num
    :return: html_str
    """
    html_str = requests.get(self.url.format(
      num), headers=self.headers).content.decode()
    # print(html_str)

    return html_str

  def parse_data(self, html_str):
    """
    用于解析发起请求返回的数据
    :param html_str:
    :return: each_page_urls
    """
    # 将返回的 html字符串 转换为 element对象,用于xpath操作
    element_obj = etree.HTML(html_str)
    # print(element_obj)

    # 获取每一页所有blog的url
    each_page_urls = element_obj.xpath(
      '//*[@id="mainBox"]/main/div[2]/div/h4/a/@href')
    # print(each_page_urls)

    return each_page_urls

  def parseIPList(self, url="http://www.xicidaili.com/"):
    """
    爬取最新代理ip,来源:西刺代理
    注意:西刺代理容易被封,如遇到IP被封情况,采用以下两种方法即可解决:
    方法一:请参考我上一篇博客《Python 实现快代理IP爬虫》 ===> 喜欢研究的同学,可参考对接此接口
    方法二:直接屏蔽掉此接口,不使用代理也能正常使用
    :param url: "http://www.xicidaili.com/"
    :return: 代理IP列表ips
    """
    ips = []
    request = urllib.request.Request(url, headers=self.firefoxHead)
    response = urllib.request.urlopen(request)
    soup = BeautifulSoup(response, "lxml")
    tds = soup.find_all("td")
    for td in tds:
      string = str(td.string)
      if re.search(self.IPRegular, string):
        ips.append(string)
    # print(ips)
    return ips

  def main(self, total_page, loop_times, each_num):
    """
    调度方法
    :param total_page: 设置博客总页数
    :param loop_times: 设置循环次数
    :param each_num: 设置每一页要随机挑选文章数
    :return:
    """
    i = 0
    # 根据设置次数,打开循环
    while i < loop_times:
      # 遍历,得到每一页的页码
      for j in range(total_page):
        # 拼接每一页的url,并模拟发送请求, 返回响应数据
        html_str = self.send_request(j + 1)

        # 解析响应数据,得到每一页所有博文的url
        each_page_urls = self.parse_data(html_str)

        # 调用parseIPList随机产生代理IP,防反爬
        # ips = self.parseIPList()
        # proxies = {"http": "{}:8080".format(
        #   ips[random.randint(0, 40)])}

        # 遍历,每一页随机挑选each_num篇文章
        for x in range(each_num):
          # 随机抽取每一页的一篇博文进行访问,防反爬
          current_url = random.choice(each_page_urls)
          status = True if requests.get(
            current_url, headers=self.headers).content.decode() else False
          print("当前正在访问的文章是:{},访问状态:{}".format(current_url, status))
          time.sleep(1)  # 延时1秒,防反爬
        time.sleep(1)  # 延时1秒,防反爬
      i += 1


if __name__ == '__main__':
  bs = BlogSpider()
  bs.main(7, 200, 3) # 参数参照main方法说明,酌情设置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现系统状态监测和故障转移实例方法
Nov 18 Python
Python实现的下载8000首儿歌的代码分享
Nov 21 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
Django 路由控制的实现代码
Nov 08 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
Django接收自定义http header过程详解
Aug 23 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
如何用python绘制雷达图
Apr 24 Python
Python Matplotlib库实现画局部图
Nov 17 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 #Python
如何关掉pycharm中的python console(图解)
Oct 31 #Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 #Python
python实现根据文件格式分类
Oct 31 #Python
Python简易计算器制作方法代码详解
Oct 31 #Python
python3 pillow模块实现简单验证码
Oct 31 #Python
利用Python校准本地时间的方法教程
Oct 31 #Python
You might like
帅气的琦玉老师
2020/03/02 日漫
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
php算法实例分享
2015/07/14 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
Python hashlib模块用法实例分析
2018/06/12 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
keras得到每层的系数方式
2020/06/15 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
外包公司软件测试工程师
2014/11/01 面试题
文明社区申报材料
2014/08/21 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python