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 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

配置防盗链

配置防盗链 : 防止别人盗取引用自己的内部资源链接! 实例解析: 维护一个A论坛(论坛成员可以免费上传图片或其它资源到服务器),突然发现这个月的流量比前几个月的...

3055
来自专栏JMCui

Netty 系列八(基于 WebSocket 的简单聊天室).

    之前写过一篇 Spring 集成 WebSocket 协议的文章 —— Spring消息之WebSocket ,所以对于 WebSocket 协议的介绍...

1175
来自专栏叁金大数据

快速搭建Hadoop及HBase分布式环境

之前的博文都是通过urllib2进行http访问,接下来我要说一个利器啊!requests模块,无法用语言对他进行赞扬了,需要的,有兴趣的,可以去了解下,移步官...

662
来自专栏乐享123

Different Users in Same Unix Group Can Not Run Mongod

1003
来自专栏运维一切

mesos:Authentication timed out

引用:https://blog.csdn.net/mhfh611/article/details/9470599

23110
来自专栏Python中文社区

Python分布式爬虫详解(三)

上一章中,利用scrapy-redis做了一个简单的分布式爬虫,虽然很一般(只有30个请求)但是基本能说清楚原理,本章中,将对该项目进行升级,使其成为一个完整的...

622
来自专栏张伟博客

小米路由器mini折腾之刷不死uboot篇

1585
来自专栏cs

通过john破解Windows密码

解压文件 dfzxk@satan-master:~$ cd /home/dfzxk/下载/ dfzxk@satan-master:~/下载$ ls -a . ...

2885
来自专栏SeanCheney的专栏

Python模拟登陆 —— 征服验证码 7 京东

登录界面 京东的登录表单设置了许多隐藏字段,如下所示: 隐藏字段 所以都要获取下来。 同样也是输错三次之后出现authcode。 验证码 import requ...

34211
来自专栏python百例

106-基于多进程的时间消息服务器

1、支持多客户端同时访问 2、客户端向服务器发送消息后,服务器把消息加上时间发回客户端 3、每个客户端断开后会产生僵尸进程,新客户端连接时销毁所有的僵尸进程

992

扫码关注云+社区