超简单的Python爬虫基础学习
re模块: 使python拥有全部的正则表达式功能。
urllib模块:使Python拥有对URL的网络请求,响应获取,代理和cookie 设置,URL解析等。
一,分析网页源代码
首先要做的是,在要爬取的网页http://www.quanshuwang.com/book/0/329中查看源代码,分析要获取内容的规律。
我要获取的就是该小说的所有章节和章节地址,分析下面的源代码:
二,获取正则表达式
通过以上分析目标源代码(下面展示了其中一小部分)
<li><a href="http://www.quanshuwang.com/book/0/329/97410.html" title="第一章 陨落的天才,共3456字">第一章 陨落的天才</a></li>
<li><a href="http://www.quanshuwang.com/book/0/329/97427.html" title="第二章 斗气大陆,共4182字">第二章 斗气大陆</a></li>
<li><a href="http://www.quanshuwang.com/book/0/329/97433.html" title="第三章 客人【求收藏,求推荐票^_^】,共3104字">第三章 客人【求收藏,求推荐票^_^】</a></li>
<li><a href="http://www.quanshuwang.com/book/0/329/97439.html" title="第四章 云岚宗 【求收藏,求推荐!】,共2414字">第四章 云岚宗 【求收藏,求推荐!】</a></li>
<li><a href="http://www.quanshuwang.com/book/0/329/97446.html" title="第五章 聚气散 【求推荐,求收藏^_^】,共2394字">第五章 聚气散 【求推荐,求收藏^_^】</a></li>
由此可以得到获取章节和URL的对应正则表达式
# 正则表达式匹配章节
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
第一个(.*?)匹配了URL,第二个匹配了章节标题
然后就可以通过Python来爬取内容了。
三,爬取数据
简单爬取网页内容
# coding:utf-8
import re
import urllib.request
def getHTML():
"获取网站源代码"
html = urllib.request.urlopen("http://www.quanshuwang.com/book/0/329").read()
html = html.decode('gbk')
# 正则表达式匹配章节
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
reg = re.compile(reg)
# 获取匹配内容
urls = re.findall(reg, html)
for url in urls:
chapter_url = url[0]
chapter_title = url[1]
print("%s : %s" % (url[1], url[0]))
getHTML()
输出结果:
第一章 陨落的天才 : http://www.quanshuwang.com/book/0/329/97410.html
第二章 斗气大陆 : http://www.quanshuwang.com/book/0/329/97427.html
第三章 客人【求收藏,求推荐票^_^】 : http://www.quanshuwang.com/book/0/329/97433.html
第四章 云岚宗 【求收藏,求推荐!】 : http://www.quanshuwang.com/book/0/329/97439.html
第五章 聚气散 【求推荐,求收藏^_^】 : http://www.quanshuwang.com/book/0/329/97446.html
......
爬取下载整部小说
# coding:utf-8
import re
import urllib.request
def getHTML():
"获取网站源代码"
html = urllib.request.urlopen("http://www.quanshuwang.com/book/0/329").read()
html = html.decode('gbk')
# 正则表达式匹配章节
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
reg = re.compile(reg)
# 获取匹配内容
urls = re.findall(reg, html)
for url in urls:
chapter_url = url[0]
chapter_title = url[1]
print("%s : %s" % (url[1], url[0]))
#通过章节URL获取章节内容
chapter_html = urllib.request.urlopen(chapter_url).read()
chapter_html = chapter_html.decode('gbk')
chapter_reg = r' (.*?)<br />'
chapter_reg = re.compile(chapter_reg, re.S)
chapter_content = re.findall(chapter_reg, chapter_html)
for content in chapter_content:
f = open('E:\pachong\dpcq\{}.txt'.format(chapter_title), 'a')
f.write((content + " \n"))
getHTML()
下载目录: