pan1

 1 import urllib.request
2 import re
3 import random
4
5 def get_source(key):
6
7 print('请稍等,爬取中....')
8 headers = [{'User-Agent':'Mozilla/5.0 (Windows NT 6.3 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36'},{'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0)'}]
9
10 header = random.choice(headers) # 随机选取一个header
11
12 keyword = key.encode('utf-8')
13 keyword = urllib.request.quote(keyword) # 对关键词进行编码
14
15 # 这里是关键,称随机搜索一个资源名,然后对其结果网址进行分析
16 url = "http://www.wangpansou.cn/s.php?wp=0&ty=gn&op=gn&q="+keyword+"&q="+keyword
17 req = urllib.request.Request(url, headers=header)
18
19 html = urllib.request.urlopen(req)
20
21 # 编码类型
22 head_type = html.headers['Content-Type'].split('=')[-1]
23
24
25 status = html.getcode() # 获取状态码,只有访问成功了才继续。
26 if status == 200:
27 html = html.read()
28 html = html.decode(head_type) # 根据网站编码时行解码
29
30 # 正则匹配 
31 pattern = re.compile('<a href="(.+)"><div class="cse-search-result_paging_num " tabindex="\d{1,3}">\d{1,3}</div></a>')
32 content = pattern.findall(html)
33
34 url_list = []
35 url_head = 'http://www.wangpansou.cn/'
36 for i in content:
37 i = url_head +i # 因为正匹配出来的只有一部分,所以把前面的一部分加上,开成完整的链接
38 if not i in url_list: # 去掉重复的,网页确实有两分,所以去重.
39 url_list.append(i) # 得到所有 有搜索结果的页面网址列表
40
41 count = 1 # 计数用
42 for each_url in url_list:
43 header = random.choice(headers) # 针对每个链接都随机选择一个'头',防止被服务器封掉
44 request1 = urllib.request.Request(each_url, headers=header)
45 html2 = urllib.request.urlopen(request1)
46
47 status = html2.getcode() # 获取状态码
48 if status == 200:
49 html2 = html2.read()
50 html2 = html2.decode(head_type)
51 pattern1 = re.compile('<a class=".+" href="(.+)" rel.+')
52 content1 = pattern1.findall(html2)
53
54
55 pattern2 = re.compile('<div id=".+" class="cse-search-result_content_item_mid">\s+(.+)')
56 content2 = pattern2.findall(html2)
57
58
59 for i in range(0,len(content2)):
60 print(str(count) + ':' + content2[i] + '\n' + content1[i])
61 print()
62 count += 1
63
64 print('共搜索到%d个资源,已经全部爬取完毕!' % count)
65
66 if __name__ == '__main__':
67 get_source(input('请输入要搜索的资源名:'))

"""

说明:
a.本搜索实际是通过通过网盘搜这个网站进行的二次搜索,如果找资源也可以直接到网盘搜进行一页一页的搜索

本脚本唯一的优点是一次性将所有结果全部爬下来,不用一页一页的翻找。

b.代码相当丑,但这也是对学习过程的记录,先实现功能,再考虑代码。
"""

略作优化,同时修正了两个小bug

pan2

 # coding = 'utf-8'
import urllib.request
import re
import random def get_html(url, header):
req = urllib.request.Request(url, headers=header)
html = urllib.request.urlopen(req) head_type = html.headers['Content-Type'].split('=')[-1]
status = html.getcode() return html, head_type, status # 分别得到html, 编码方式, 访问状态码 headers = [{'User-Agent':'Mozilla/5.0 (Windows NT 6.3 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36'},{'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0)'}] keyword =input('请输入要搜索的资源名:')
keyword = urllib.request.quote(keyword.encode('utf-8'))
url = "http://www.wangpansou.cn/s.php?wp=0&ty=gn&op=gn&q="+keyword+"&q="+keyword
header = random.choice(headers) f_html, f_head_type, f_status = get_html(url, header) if f_status == 200:
f_html = f_html.read()
f_html = f_html.decode(f_head_type) pattern = re.compile('<a href="(.+)"><div class="cse-search-result_paging_num " tabindex="\d{1,3}">\d{1,3}</div></a>')
content = pattern.findall(f_html) # 得到所有有相关结果的页面链接 url_list = []
url_head = 'http://www.wangpansou.cn/'
for i in content:
i = url_head +i # 因为正匹配出来的只有一部分,所以把前面的一部分加上,开成完整的链接
if not i in url_list: # 去掉重复的,网页确实有两分,所以去重.
url_list.append(i) # 得到所有 有搜索结果的页面网址列表
first_url = url_list[0][:-2] + '' # 加上第一页
url_list.insert(0,first_url) count = 0
for each_url in url_list:
header = random.choice(headers)
s_html, s_head_type, s_status = get_html(each_url, header) if s_status == 200:
s_html = s_html.read()
s_html = s_html.decode(s_head_type)
s_pattern = re.compile('<a class=".+" href="(.+)" rel.+')
s_content = s_pattern.findall(s_html) # 分享的链接 t_pattern = re.compile('<div id=".+" class="cse-search-result_content_item_mid">\s+(.+)')
t_content = t_pattern.findall(s_html) # 文件信息
else:
print('Website Error!') for i in range(0, len(s_content)):
count += 1
print(str(count) + ':' + t_content[i] + '\n' + s_content[i])
print() print('共搜索到%d个资源,已经全部爬取完毕!' % count)

python 爬取百度云资源的更多相关文章

  1. Python——爬取百度百科关键词1000个相关网页

    Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...

  2. python 爬取百度url

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-08-29 18:38:23 # @Author : EnderZhou (z ...

  3. python爬取百度贴吧帖子

    最近偶尔学下爬虫,放上第二个demo吧 #-*- coding: utf-8 -*- import urllib import urllib2 import re #处理页面标签类 class Too ...

  4. 爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  5. 假期学习【十一】Python爬取百度词条写入csv格式 python 2020.2.10

    今天主要完成了根据爬取的txt文档,从百度分类从信息科学类爬取百度词条信息,并写入CSV格式文件. txt格式文件如图: 为自己爬取内容分词后的结果. 代码如下: import requests fr ...

  6. python爬取百度搜索结果ur汇总

    写了两篇之后,我觉得关于爬虫,重点还是分析过程 分析些什么呢: 1)首先明确自己要爬取的目标 比如这次我们需要爬取的是使用百度搜索之后所有出来的url结果 2)分析手动进行的获取目标的过程,以便以程序 ...

  7. 使用python爬取百度贴吧内的图片

    1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...

  8. python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', 'query 问题

    解决办法: 修改url为手机版的地址:http://fanyi.baidu.com/basetrans User-Agent也用手机版的 测试代码: # -*- coding: utf-8 -*- & ...

  9. Python爬取百度贴吧数据

    本渣除了工作外,在生活上还是有些爱好,有些东西,一旦染上,就无法自拔,无法上岸,从此走上一条不归路.花鸟鱼虫便是我坚持了数十年的爱好. 本渣还是需要上班,才能支持我的业余爱好.上班时间还是尽量访问外网 ...

随机推荐

  1. oracle 变量赋值

    在oracle 中使用 select 字段 into 变量 from 表 where 条件 这种方法给变量赋值时和MSSQL的行为有比较大区别. 在MSSQL中如果在该表中未检索到任何行,则变量的值保 ...

  2. Httpservlet cannot be resolved to a type的原因与解决方法

    刚开始学习Servlet,在Eclipse中新建了一个Servlet,不过页面上报错: Httpservlet cannot be resolved to a type,显然是Eclipse找不到相应 ...

  3. DW(三):polybase基本理论

    PolyBase is a technology that accesses and combines(整合) both non-relational and relational data, all ...

  4. 关于双击事件.MouseEvent.DOUBLE_CLICK

    as3提供了双击事件的调用,但有时候碰到双击事件无法响应,所以总结下原因.先摘录一段官方关于 doubleClick 事件发生的条件.如果 InteractiveObject 的 doubleClic ...

  5. RabbitMQ和Kafka

    转自通九大神的博客 起因 最近公司RabbitMQ的集群出了点问题,然后有些亲就说RabbitMQ慢且不好用,是一个瓶颈,不如换成Kafka.而我本人,使用RabbitMQ有一点久了,认为这个事情应当 ...

  6. Android和WCF通信 - 大数据压缩后传输

    Android和WCF通信 - 大数据压缩后传输 本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html 最近一直在优化项目 ...

  7. Env:zsh和fish安装和使用

    zsh优势兼容bash, 方便git管理,但是有时候切换速度较慢,特别遇到git仓库目录 fish优势速度较快,路径提示也不错,但是和bash不兼容 1. zsh 首先,可以通过cat /etc/sh ...

  8. tarjan算法 POJ3177-Redundant Paths

    参考资料传送门 http://blog.csdn.net/lyy289065406/article/details/6762370 http://blog.csdn.net/lyy289065406/ ...

  9. 黄聪:WordPress 多站点建站教程(六):使用WP_Query、switch_to_blog函数实现获取子站点分类中的文章

    首先在你使用主题的funtions.php里面添加下代码: //根据时间显示最新的分类文章内容,每个站点显示一篇内容 //$blog_id 子站点ID //$catid 分类ID wp_reset_q ...

  10. NeHe OpenGL教程 第二十九课:Blt函数

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...