首页 > 代码库 > Python 爬虫 之 阅读呼叫转移(二)
Python 爬虫 之 阅读呼叫转移(二)
上一篇博客我们成功地从网页上爬下了小说的一个章节,理所当然地,接下来我们要把整本小说都爬下来。首先,我们要把程序从原来的读完一章就结束,改成读完一章之后可以继续进行下一章的阅读。
注意到每个小说章节的网页下面都有下一页的链接。通过查看网页源代码,稍微整理一下( 不显示了),我们可以看到这一部分的 HTML 是下面这种格式的:
<div id="footlink"> <script type="text/javascript" charset="utf-8" src=http://www.mamicode.com/"/scripts/style5.js"></script>>上一页 返回目录 下一页 都在一个 id 为 footlink 的 div 中,如果想要对每个链接进行匹配的话,会抓取到网页上大量的其他链接,但是 footlink 的 div 只有一个啊!我们可以把这个 div 匹配到,抓下来,然后在这个抓下来的 div 里面再匹配 <a> 的链接,这时就只有三个了。只要取最后一个链接就是下一页的 url 的,用这个 url 更新我们抓取的目标 url ,这样就能一直抓到下一页。用户阅读逻辑为每读一个章节后,等待用户输入,如果是 quit 则退出程序,否则显示下一章。
基础知识:
上一篇的基础知识加上 Python 的 thread 模块.
源代码:
# -*- coding: utf-8 -*- import urllib2 import re import thread import chardet class Book_Spider: def __init__(self): self.pages = [] self.page = 1 self.flag = True self.url = "http://www.quanben.com/xiaoshuo/10/10412/2095096.html" # 将抓取一个章节 def GetPage(self): myUrl = self.url user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent } req = urllib2.Request(myUrl, headers = headers) myResponse = urllib2.urlopen(req) myPage = myResponse.read() charset = chardet.detect(myPage) charset = charset['encoding'] if charset == 'utf-8' or charset == 'UTF-8': myPage = myPage else: myPage = myPage.decode('gb2312','ignore').encode('utf-8') unicodePage = myPage.decode("utf-8") # 找出 id="content"的div标记 #抓取标题 my_title = re.search('<div.*?id="title"><h1>(.*?)</h1></div>',unicodePage,re.S) my_title = my_title.group(1) #抓取章节内容 my_content = re.search('<div.*?id="content">(.*?)</div>',unicodePage,re.S) my_content = my_content.group(1) my_content = my_content.replace("<br />","\n") my_content = my_content.replace(" "," ") #用字典存储一章的标题和内容 onePage = {'title':my_title,'content':my_content} #找到页面下方的连接区域 foot_link = re.search('<div.*?id="footlink">(.*?)</div>',unicodePage,re.S) foot_link = foot_link.group(1) #在连接的区域找下一页的连接,根据网页特点为第三个 nextUrl = re.findall(u'<a.*?href=http://www.mamicode.com/"(.*?)">(.*?)',foot_link,re.S)>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。