python爬hdu网页
今天同学说家里没网,让我给他下点题给他做,瞬间想到爬下hdu,花了一下午,学了点python的爬虫,写的代码好丑啊,不过目前还是达到目的了。
先写爬虫,就是解析网页的事,通过右键查看编码方式,发现hdu是gbk格式的编码,但是好像不能直接爬,要模拟浏览器行为,百度一下,我就知道,网上早有高人告诉了方法,马上用在代码里,但是那个高人好像没说
req_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Accept':'text/html;q=0.9,*/*;q=0.8','Accept-Charset':'GBK,utf-8,ISO-8859-1;q=0.7,*;q=0.3','Accept-Encoding':'gzip','Connection':'close','Referer':None #注意如果依然不能抓取的话,这里可以设置抓取网站的host}
这个表示支持gz压缩的网页,我解析一下午,各种报错,都快崩溃,后来发现Accept-Encoding这里接受了一个好像是压缩文件的东西,一百度,果然是。继续百度解压就可以了。
然后今天的成功就出来了,下面这部分代码是爬2600到2800的。
# -*- coding: utf-8 -*-
from StringIO import StringIO
import gzip
import urllib2
import urllib
import codecs
num = 2600
tmpurl = 'http://acm.hdu.edu.cn/showproblem.php?pid='
while num <= 2800:url = tmpurl+str(num)#resp=urllib2.urlopen(url)req_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept':'text/html;q=0.9,*/*;q=0.8',
'Accept-Charset':'GBK,utf-8,ISO-8859-1;q=0.7,*;q=0.3',
'Accept-Encoding':'gzip',
'Connection':'close',
'Referer':None #注意如果依然不能抓取的话,这里可以设置抓取网站的host
}req_timeout = 5req = urllib2.Request(url,None,req_header)resp = urllib2.urlopen(req,None,req_timeout)if resp.info().get('Content-Encoding') == 'gzip':buf = StringIO( resp.read())f = gzip.GzipFile(fileobj=buf)html=f.read()else:html=resp.read()html.decode('gbk')#print(html)name = "D:\pythonre\HDU"+str(num)+".html"fo=codecs.open(name, "w", "gbk")txt = unicode("\n", "gbk")fo.write(txt)fo.write(html.decode('gbk'))fo.close()num=num+1
今天又无聊把代码改进了下,现在只要输入抓取的范围就可以自己分配线程数了,500题分一个线程(随手写的,并不知道分多少比较好),目前杭电题号在1000-5614之间,所以抓取范围也不能超过这个。(目前最大的问题是无法解析js)
#! /usr/bin/env python
# -*- coding=utf-8 -*-
# @Author pythontab.com
from StringIO import StringIO
from time import ctime,sleep
import threading
import gzip
import urllib2
import urllib
import codecs
import os
def first(begin,end):num = begintmpurl = 'http://acm.hdu.edu.cn/showproblem.php?pid='while num <= end:if num>=5614:#如果杭电题目增加了,可以把这个改为当前的最大题号,这样就可以抓取后面新加的题了breakurl = tmpurl+str(num)#resp=urllib2.urlopen(url)req_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Accept':'text/html;q=0.9,*/*;q=0.8','Accept-Charset':'GBK,utf-8,ISO-8859-1;q=0.7,*;q=0.3','Accept-Encoding':'gzip','Connection':'close','Referer':None }req_timeout = 5req = urllib2.Request(url,None,req_header)resp = urllib2.urlopen(req,None,req_timeout)if resp.info().get('Content-Encoding') == 'gzip':buf = StringIO( resp.read())f = gzip.GzipFile(fileobj=buf)html=f.read()else:html=resp.read()html.decode('gbk')#杭电是GBK编码,要是其他网站不是的话可以去看看修改,目前我还不会自适应编码#print(html)name = "D:\pythonre\HDU"+str(num)+".html"#请在此处编辑保存路径fo=codecs.open(name, "w", "gbk")txt = unicode("\n", "gbk")fo.write(txt)fo.write(html.decode('gbk'))fo.close()num=num+1
if not os.path.isdir(r'D:\\pythonre\\'):os.mkdir(r'D:\\pythonre\\')
left=1
while left<1000 or right >5614 or left>right:left = input(u"请输入抓取范围left")right= input(u"请输入抓取范围right")
th =((right - left) + 500) /500 #向上取整,0-499个题为一个线程,500-999为两个
threads = []
i = 1
fin = 0
while i<=th:if i==th:threads.append(threading.Thread(target=first,args=(left,right),))else :threads.append(threading.Thread(target=first,args=(left,left+499),))i+=1left+=500if __name__ == '__main__':for t in threads:t.setDaemon(True)t.start()t.join()print "End!"
python爬hdu网页相关推荐
- python爬取图片-Python爬取网页中的图片(搜狗图片)详解
前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...
- python爬取网页公开数据_如何用Python爬取网页数据
使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...
- 编程python爬取网页数据教程_实例讲解Python爬取网页数据
一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...
- python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)
python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...
- python爬虫教程:实例讲解Python爬取网页数据
这篇文章给大家通过实例讲解了Python爬取网页数据的步骤以及操作过程,有兴趣的朋友跟着学习下吧. 一.利用webbrowser.open()打开一个网站: >>> import w ...
- 使用Python爬取网页图片
使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...
- Python小姿势 - Python爬取网页数据
Python爬取网页数据 爬取网页数据是一个比较常见的Python应用场景,有很多第三方库可以帮助我们完成这个任务.这里我们介绍一下urllib库中的一个常用方法:urllib.request.url ...
- 如何用 Python 爬取网页制作电子书
本文来自作者 孙亖 在 GitChat 上分享 「如何用 Python 爬取网页制作电子书」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 0 前言 有人爬取数据分析黄金周旅游景点,有人爬 ...
- 利用python爬取网页图片
学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...
最新文章
- 删除数据库日志sql语句
- 状态机思路在程序设计中的应用
- python dict 排序原理_第一章Python数据结构和算法(字典排序)
- 找不到匹配的key exchange算法_目标检测--匹配策略
- 比较第一与第二个字符串,是否有连续的5个字符相同.sql
- ORA-01400: 无法将 NULL 插入 (CHARGE_WQRL.SF_JMQTFY_T.BH)
- 如何在Java中修复表达式的非法开头
- redis是什么_什么是Redis?为什么我们要用Redis?
- iOS逆向之旅(进阶篇) — 重签名APP(一)
- 如何修改opencart的模版适合为mycncart系统使用
- document.ready和window.onload
- Mutt email 程序使用入门 作者:王垠
- 设计模式之——观察者模式
- 抖音java表白教程_抖音表白代码
- 什么是SNP遗传力?
- windows各类密码搜集
- 浏览器被劫持怎么解决?关于浏览器被劫持主页的处理方法
- 数值分析:高斯消元法
- 2021-2027年全球与中国滴流咖啡壶行业市场前瞻与投资战略规划分析报告
- Smack核心机制浅析
热门文章
- Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
- 解决ZooKeeper配置中出现Error contacting service. It is probably not running.
- MPLAB常见问题及解决方法
- 深圳 IT 男打人后疯狂凡尔赛,还教育民警,这回把 IT 人的脸都丢尽了……
- kdevelop 安装
- JVM知识点整理2——(类加载)
- Unity FACEGOOD Audio2Face 通过音频驱动面部BlendShape
- Win11远程桌面连接怎么打开?Win11远程桌面连接的五种方法
- 计算机毕业设计JAVA高校体育场馆预约管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw
- HCIA/HCIP使用eNSP模拟STP实验与STP根桥、根端口、指定端口选举方法