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抓取淘宝下拉框关键词的方法
Jul 08 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
Dec 18 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Python基础类继承重写实现原理解析
Apr 03 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 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
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
python之Socket网络编程详解
2016/09/29 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python实现两个文件夹的同步
2019/08/29 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
个人授权委托书范文
2014/09/21 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
合同补充协议书
2016/03/24 职场文书