Python 刷简书的浏览量 阅读数端午节快乐。熬夜看世界杯,先刷到 10k 吧。简易爬虫 common.py

端午节快乐。熬夜看世界杯,先刷到 10k 吧。


使用 homebrow 安装 python 安装库时不需要再输入 [sudo] 。

$ brew install python # python 3
$ brew install python@2 # python 2
$ pip install virtualenv # 虚拟环境
$ pip install virtualenvwrapper
$ cat ~/.bashrc
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Code/python
source /usr/local/bin/virtualenvwrapper.sh
$ cat .bash_profile 
if [ "${BASH-no}" != "no" ]; then
    [ -r ~/.bashrc ] && . ~/.bashrc
fi
$ mkvirtualenv jianshu
(jianshu) $
$ deactivate # 退出虚拟环境
$ workon # 虚拟环境列表
$ workon jianshu # 进入 jianshu 虚拟环境  

识别网站所用技术

$ pip install builtwith
$ python
>>> import builtwith
>>> builtwith.parse('http://iosdevlog.com')
{u'blogs': [u'Jekyll'], u'cms': [u'Jekyll']}

http://iosdevlog.com 是用 Jekyll 搭建的。

寻找网站所有者

$ pip install python-whois
>>> import whois
>>> print(whois.whois('iosdevlog.com'))
{
  "updated_date": "2017-03-23 22:19:16", 
  "status": "ok https://icann.org/epp#ok", 
  "name": null, 
  "dnssec": "unsigned", 
  "city": "Hangzhou", 
  "expiration_date": "2018-10-01 20:13:15", 
  "zipcode": null, 
  "domain_name": [
    "IOSDEVLOG.COM", 
    "iosdevlog.com"
  ], 
  "country": null, 
  "whois_server": "grs-whois.hichina.com", 
  "state": "Zhejiang", 
  "registrar": "HiChina Zhicheng Technology Ltd.", 
  "referral_url": null, 
  "address": null, 
  "name_servers": [
    "F1G1NS1.DNSPOD.NET", 
    "F1G1NS2.DNSPOD.NET"
  ], 
  "org": null, 
  "creation_date": "2015-10-01 20:13:15", 
  "emails": "DomainAbuse@service.aliyun.com"
}

http://iosdevlog.com 当时是在万网注册的。

简易爬虫 common.py

# -*- coding: utf-8 -*-

import urllib2
import urlparse

def download(url, user_agent='iosdevlog', proxy=None, num_retries=2):
    """Download function with support for proxies"""
    print 'Downloading:', url
    headers = {'User-agent': user_agent}
    request = urllib2.Request(url, headers=headers)
    opener = urllib2.build_opener()
    if proxy:
        proxy_params = {urlparse.urlparse(url).scheme: proxy}
        opener.add_handler(urllib2.ProxyHandler(proxy_params))
    try:
        html = opener.open(request).read()
    except urllib2.URLError as e:
        print 'Download error:', e.reason
        html = None
        if num_retries > 0:
            if hasattr(e, 'code') and 500 <= e.code < 600:
                # retry 5XX HTTP errors
                html = download(url, user_agent, proxy, num_retries-1)
    return html

if __name__ == '__main__':
    print(download('http://iosdevlog.com'))

网站地图爬虫 sitemap.py

# -*- coding: utf-8 -*-

import re
from common import download

def crawl_sitemap(url):
    # download the sitemap file
    sitemap = download(url)
    # extract the sitemap links
    links = re.findall('<loc>(.*?)</loc>', sitemap)
    # download each link
    for link in links:
        html = download(link)
        # scrape html here
        # ...

if __name__ == '__main__':
    crawl_sitemap('http://iosdevlog/sitemap.xml')

刷简书的浏览量 阅读数 jianshu_views_count.py

使用 postman 导出为 python - request ,当然也可以导出成其它语言代码。

postman.png

# -*- coding: utf-8 -*-
# iOSDevLog

import requests
import re
from common import download # 调用前面写的下载函数

# 阅读数
def crawl_views_count(jianshu_url):
    jianshu = download(jianshu_url)
    views_count = re.search(r'views_count":(\d+),', jianshu).group(1)
    print("views_count = " + views_count)

# uuid
def crawl_uuid(jianshu_url):
    jianshu = download(jianshu_url)
    uuid = re.search(r'uuid":"([a-z0-9\-]+?)"}', jianshu).group(1)

    return uuid

if __name__ == '__main__':
    jianshu_url = 'https://www.jianshu.com/p/6f18ca5521a6'
    max_count = 1000 # 刷阅读最大次数

    uuid = crawl_uuid(jianshu_url)
    print("uuid = " + uuid)
    mark_viewed_url = jianshu_url.replace("/p/", "/notes/") + '/mark_viewed.json'
    print("mark_viewed_url = " + mark_viewed_url)
    payload = "uuid=" + uuid
    print("payload = " + payload)

    headers = {
        'Origin': "https://www.jianshu.com",
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1 Safari/605.1.15",
        'Referer': jianshu_url,
        'Content-Type': "text/plain",
        'Cache-Control': "no-cache"
    }

    for _ in range(0, max_count):
        requests.request("POST", mark_viewed_url, data=payload, headers=headers)
        crawl_views_count(jianshu_url) # 检查阅读是否变更

GitHub 源码

https://github.com/iOSDevLog/jianshu_views_count

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晨星先生的自留地

实战系列之你真的会mysql注入么?

1695
来自专栏北京马哥教育

OpenStack Icehouse私有云实战部署(一)

前言 相信你一定对“云主机”一词并不陌生吧,通过在Web页面选择所需主机配置,即可快速定制一台属于自己的虚拟主机,并实现登陆操作,大大节省了物理资源。但这一过程...

3429
来自专栏Albert陈凯

文本编码转换工具iconv 附批量转换文件编码命令

网络上下载的好多文本是GBK的编码,在mac电脑上打开是乱码 除了下载有多种编码的文本编辑器外,通过终端也可以进行转码 iconv -f GBK -t UTF-...

3459
来自专栏Kirito的技术分享

研究优雅停机时的一点思考

最近瞥了一眼项目的重启脚本,发现运维一直在使用 kill-9<pid> 的方式重启 springboot embedded tomcat,其实大家几乎一致认为...

1.2K6
来自专栏happyJared

IDEA快捷键拆解系列(十六):插件篇

  本文整理了博主用过的一些IDEA插件。其中,五星是强烈推荐,四星是比较推荐,三星仅供参考,两星的就不多说了,一星是炫酷型的插件,一般帮助也不大。最后,欢迎留...

1812
来自专栏Android 开发者

Android P 行为变更

2402
来自专栏Python中文社区

最新实用Python异步爬虫代理池(开源)

异步爬虫代理池,以 Python asyncio 为基础,旨在充分利用 Python 的异步性能。

1131
来自专栏杨建荣的学习笔记

聊聊Data Guard中的DG Broker(r10笔记第24天)

DG Broker是Oracle为Data Guard维护提供的一个很不错的工具,从我的实际使用来看,早期的版本中似乎大家都还是存在一定的思维定式,认为手工维护...

2754
来自专栏Netkiller

日志归档与数据挖掘

日志归档与数据挖掘 摘要 2013-03-19 第一版 2014-12-16 第二版 我的系列文档 Netkiller Architect 手札 Netki...

35210
来自专栏流媒体

Linux下ndk编译移植FFmpeg到Android平台(二)——集成x264和libfdk-aac

在前面的Linux下ndk编译移植FFmpeg到Android平台文章中介绍了如何将最基本的FFmpeg到Android平台。但只是简单的移植了FFmpeg,没...

1778

扫码关注云+社区