<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: #!C:\Python27\python.exe#coding=utf8import osimport pdfkitimport urllib2from bs4 import BeautifulSoupfr...
#!C:\Python27\python.exe
#coding=utf8

import os
import pdfkit
import urllib2
from bs4 import BeautifulSoup
from multiprocessing import Pool


import socket
socket.setdefaulttimeout(60)

import sys
reload(sys)
sys.setdefaultencoding('utf-8')


def url_open(url):
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'
    headers = {'User-Agent': user_agent}
    request = urllib2.Request(url=url, headers=headers)
    try:
        page = urllib2.urlopen(request, timeout=60)
    except urllib2.HTTPError as e:
        return 1
    contents = page.read()
    # print contents
    soup = BeautifulSoup(contents.decode('utf-8','ignore'), "lxml")
    return soup


def retrieve_pdf(dir, link):
    savedStderr = sys.stderr
    with open('errlog.txt', 'w+') as file:
        sys.stderr = file
        try:
            pdfkit.from_url(link, dir)
            pass
        finally:
            pass
    sys.stderr = savedStderr


def strip_char(string):
    char = ['*', '/', '\\', ':', '"', '?', '<', '>', '|']
    processed = []
    for i in string:
        if i not in char:
            processed.append(i)
    return ''.join(processed)


def crawler(root, url, num):
        # print url
        if url_open(url) != 1:
            soup = url_open(url)
            # print soup
            for tr in soup.find_all("tr"):
                # print tr
                td = tr.find_all('td')
                if list(td) == None:
                    continue
                if len(td) > 0:
                    if td[0].get_text() == u"提交时间":
                        continue
                    date = td[0].get_text()
                    title = td[1].get_text()
                    dir = title + '.pdf'
                    type = td[2].get_text()
                    poster = td[3].get_text()
                    print date + "  " + title + "   " + type + "    " + poster
                    link = root + '.'.join(tr.get('onclick').split('\'')[1].split('.')[1:])
                    print link
                    print "Retrieving PDF..."
                    print dir
                    dir = strip_char(dir).encode('utf-8').decode('utf-8')
                    temp_name = 'temp' + str(num) + '.pdf'
                    try:
                        retrieve_pdf(temp_name, link)
                    except Exception:
                        if os.path.exists(temp_name):
                            print "Retrieved Successfully!"
                            os.rename(temp_name, dir)
                        else:
                            print 'Retrieve failed!'
                        continue


def single_func(num):
    root = 'http://cb.drops.wiki'
    url = "http://cb.drops.wiki/search.php?kind=drops&keywords=&page=" + str(num)
    crawler(root, url, num)


if __name__ == '__main__':
    # single_func(1) #func test
    # for page in range(1, 86):
    #     single_func(page)
    pool = Pool(processes=4)
    for i in range(1, 86):
        result = pool.apply_async(single_func, (i,))
    pool.close()
    pool.join()

目录
相关文章
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1111 0
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4):  -----Task ID:  task_201411191723_723592_m_000004URL:  http://DDS0204.
1073 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
833 0
|
Web App开发 前端开发 关系型数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
fuser可用于查询文件、目录、socket端口和文件系统的使用进程 1.查询文件和目录使用者 fuser最基本的用法是查询某个文件或目录被哪个进程使用: # fuser -v .
943 0
|
Web App开发 前端开发
|
Web App开发 前端开发
|
存储 监控 数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
为首次部署MongoDB做好准备:容量计划和监控 作者Mat Keep ,译者孙镜涛如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要监控哪些关键指标? 如何能够确定添加分片的时机? 有哪些工具可以对数据库进行备份和恢复? 怎样才能安全地访问所有新的实时大数据? 本文介绍了硬件选择、扩展、HA和监控。
2697 0
|
Web App开发 前端开发 算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
基于大数据的精准营销与应用场景 2015年08月11日 大数据 大数据营销时代来临营销学领域过去半个多世纪的发展让我们见证了从“以产品为中心”到“以客户为中心”的转变。
997 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
930 0