参考: Python爬虫个人记录(一)豆瓣250

(2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!)

一、目的分析

获取http://bbs.fishc.com/forum-246-1.html 中小甲鱼零基础入门学习python课件以及源代码

即这玩意

二、步骤分析

1、进入http://bbs.fishc.com/forum-246-1.html
2、通过xpath()分析出一级连接
http://bbs.fishc.com/thread-36353-1-1.html
3、通过xpath()分析出二级下载链接
4、通过二级链接接下载课件(失败)(更新,已成功下载文件,并附录在末尾!)

三、scrapy shell 模拟分析

运行cmd ->scrapy shell

fetch('http://bbs.fishc.com/forum-246-1.html')

返回200成功

获取需要信息的xpath(记录一有),这里只再演示一次(qq浏览器版本)

鼠标放在所需元素,右键查看元素(或检查),copy xpath

得到 //*[@id=”normalthread_36353”]/tr/th/a[2]

在shell中测试

>>> response.xpath('//*[@id="normalthread_36353"]/tr/th/a[2]/text()').extract()
['第000讲 愉快的开始(视频+课件)']
>>>

成功
通过分析网页

所需要的网页都带有
//*[@id=”normalthread_数字”] 这样的特征

于是修改xpath()使用模糊查询

response.xpath(‘//table/*[contains(@id,“normalthread”)]/tr/th/a[2]’).extract()

>>> response.xpath('//*[@id="normalthread_36353"]/tr/th/a[2]/text()').extract()
['第000讲 愉快的开始(视频+课件)']
>>> response.xpath('//table/*[contains(@id,"normalthread")]/tr/th/a[2]/text()').extract()
['第000讲 愉快的开始(视频+课件)', '第001讲 我和Python的第一次亲密接触(视频+课件)', '第002讲 用Python设计第一个游戏(视频+课件+源代码)', '第003讲 小插曲之变量和字符串(视频+课件)', '第004讲 改进我们的小游戏(视频+课件+源代码)', '第005讲 改进我们的小游戏(视频+课件+源代码)', '第006讲 Pyhon之常用操作符(视频+课件)', '第007讲 了不起的分支和循环01(视频+课件)', '第008讲 了不起的分支和循环02(视频+课件+源代码)', '第009讲 了不起的分支和循环03(视频+课件+源代码)', '第010 讲 列表:一个打了激素的数组(视频+课件)', '第011讲 列表:一个打了激素的数组2(视频+课件)', '第012讲 列表:一个打了激素的数组3(视频+课件)', '第013讲 元组:戴上了枷锁的列表(视频+课件)', '第014讲 字符串:各种奇葩的内置方法(视频+课件)', '第015讲 字符串:格式化(视频+课件)', '第016讲 序列!序列!(视频+课件)', '第017讲 函数:Python的乐高积木(视频+课件+源代码)', '第018讲 函数:灵活即强大(视频+课件)', '第019讲 函数:我的地盘听我的(视频+课件+源代码)', '第020讲 函数: 内嵌函数和闭包(视频+课件)', '第021讲 函数:lambda表达式(视频+课件)', '第022讲 函数:递归是神马(视频+课件+源代码)', '第023讲 递归:这帮坑爹的小兔崽子(视频+课件+源代码)', '第024讲 递归:汉诺塔(视频+课件+源代码)', '第025讲 字典:当索引不好用时(视频+课件)', '第026讲 字典:当索引不好用时2(视频+课件)', '第027讲 集合:在我的世界里,你就是唯一(视频+课件)', '第028讲 文件:因为懂你,所以永恒(视频+课件)', '第029讲 文件:一个任务(视频+课件+源代码)', '第030讲 文件系统 :介绍一个高大上的东西(视频)', '第031讲 永久存储:腌制一缸美味的泡菜(视频+课件+源代码)']
>>>
成功获取所需要元素,接下来获取相对应地址
同上不难分析出网页连接地址xpath为
“//table/*[contains(@id,’nor’)]/tr/th/a[2]/@href” >>> response.xpath("//table/*[contains(@id,'nor')]/tr/th/a[2]/@href").extract()
['thread-36353-1-1.html', 'thread-36354-1-1.html', 'thread-38065-1-1.html', 'thread-38066-1-1.html', 'thread-38067-1-1.html', 'thread-38068-1-1.html', 'thread-38069-1-1.html', 'thread-38072-1-1.html', 'thread-43424-1-1.html', 'thread-43425-1-1.html', 'thread-43426-1-1.html', 'thread-43427-1-1.html', 'thread-43429-1-1.html', 'thread-43430-1-1.html', 'thread-43431-1-1.html', 'thread-43433-1-1.html', 'thread-43434-1-1.html', 'thread-43435-1-1.html', 'thread-43436-1-1.html', 'thread-43437-1-1.html', 'thread-43438-1-1.html', 'thread-43440-1-1.html', 'thread-43441-1-1.html', 'thread-43443-1-1.html', 'thread-43444-1-1.html', 'thread-43445-1-1.html', 'thread-43446-1-1.html', 'thread-45420-1-1.html', 'thread-45421-1-1.html', 'thread-45422-1-1.html', 'thread-48042-1-1.html', 'thread-48043-1-1.html']
>>>

至此可以书写python代码了

四、Python代码书写(细节参考记录一)

思路:
1、#获取一级链接
2、#获取二级文件下载链接
2、#打开二级文件下载链接,下载文件(这是个坑,会员才能下载。。。所以失败,方法后面使用cookie看能否解决)

import urllib.request
import os
from lxml import etree #打开一个网页操作
def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400')
response = urllib.request.urlopen(url)
html = response.read() return html #保存多个文件
def save(folder, file_url):
i = 0
for each in file_url:
#print(each)
file_name = str(i)
i += 1
with open(file_name, 'w') as f:
file = url_open(each)
f.write(file) #保存一个文件
def save1():
file_name = 'asd'
with open(file_name, 'w') as f:
f.write() def find_data(url = '', xrule = ''):
result_data = [] html = url_open(url)
selector = etree.HTML(html)
result_data = selector.xpath(xrule) return result_data def test1():
#获取一级链接
list_1 = []
xrule_1 = "//table/*[contains(@id,'nor')]/tr/th/a[2]/@href"
for i in range(1,2):
url = 'http://bbs.fishc.com/forum-246-' + str(i) + '.html'
result_temp = find_data(url, xrule_1)
for each in result_temp:
list_1.append(each)
print('http://bbs.fishc.com/' + each)
#print(list_1)
#获取二级文件下载链接
list_2 = []
xrule_2 = '//*[contains(@id,"attach")]/a/@href'
for each in list_1:
url = 'http://bbs.fishc.com/' + str(each)
result_temp = find_data(url, xrule_2)
for each in result_temp:
list_2.append(each)
print('http://bbs.fishc.com/' + each)
#print(list_2) if __name__ == '__main__':
test1()

直接上源码了,有一些注释,可以自行参考阅读

五、总结

失败的尝试。。原因:还学要学习下载链接原理

顺便打波小广告:I love fishc.com

欢迎来鱼c论坛学习^_^零基础入门学习python

六、下载文件更新

1、通过前面步骤将文件名及密码保存在一个文件里

2、取出下载链接,并模拟cookie登陆

3、保存文件

Python爬虫个人记录(二) 获取fishc 课件下载链接的更多相关文章

  1. Python 爬虫的工具列表 附Github代码下载链接

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  2. [转] Python 爬虫的工具列表 附Github代码下载链接

    转自http://www.36dsj.com/archives/36417 这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests - ...

  3. Python爬虫个人记录(三)爬取妹子图

    这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...

  4. Python爬虫初学(二)—— 爬百度贴吧

    Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...

  5. Python爬虫入门(二)之Requests库

    Python爬虫入门(二)之Requests库 我是照着小白教程做的,所以该篇是更小白教程hhhhhhhh 一.Requests库的简介 Requests 唯一的一个非转基因的 Python HTTP ...

  6. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  7. 基于python爬虫的github-exploitdb漏洞库监控与下载

    基于python爬虫的github-exploitdb漏洞库监控与下载 offensive.py(爬取项目历史更新内容) #!/usr/bin/env python # -*- coding:utf- ...

  8. Python爬虫小白---(二)爬虫基础--Selenium PhantomJS

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...

  9. Python爬虫入门案例:获取百词斩已学单词列表

    百词斩是一款很不错的单词记忆APP,在学习过程中,它会记录你所学的每个单词及你答错的次数,通过此列表可以很方便地找到自己在记忆哪些单词时总是反复出错记不住.我们来用Python来爬取这些信息,同时学习 ...

随机推荐

  1. COGS 5. P服务点设置

    5. P服务点设置 http://www.cogs.pro/cogs/problem/problem.php?pid=5 ★★   输入文件:djsc.in   输出文件:djsc.out   简单对 ...

  2. Linux系统中连接使用NAS

    在使用NAS时,需要先确定NAS上的NFS服务和SMB的服务都开启了: 然后需要用NAS上的用户去登录,这里用的是admin: # smbclient -L 192.168.1.40 -U admin ...

  3. android studio run得时候 选择开启对话框

    一个项目run 调试得时候,在Android studio3.0默认得设置是运行在上一个device上,我们通过改变设置,废话不多说,上图: 然后点击这个edit config 在miscellane ...

  4. Writing your first academic paper

    Writing your first academic paper If you are working in academics (and you are if you are working wi ...

  5. javascript 高度相关

    //scrollTop; var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop); ...

  6. ASP.NET 数据库缓存依赖

    By Peter A. Bromberg, Ph.D. 在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cach ...

  7. mysql的force index

    MSQL中使用order by 有个坑,会默认走order by 后面的索引.而不走where条件里应该走的索引.大家在使用时要绕过此坑. 如下语句因为order by 走了settle_id这个主键 ...

  8. 20155227 2016-2017-2 《Java程序设计》第七周学习总结

    20155227 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 认识时间与日期 时间的度量 世界时:在1972年引入UTC之前,GMT与UT是相同的. 国际 ...

  9. 20155235 2016-2017-2 《Java程序设计》第5周学习总结

    20155235 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章知识点 语法与继承结构 使用try.catch 异常继承结构 要抓还是要抛 贴心还是造 ...

  10. 延迟注入工具(python)

    延迟注入工具(python) #!/usr/bin/env python # -*- coding: utf-8 -*- # 延迟注入工具 import urllib2 import time imp ...