利用python网络爬虫将网上的资料用python把它保存到本地。用爬虫下载东西速动快,量大。他最神奇的是可以下载一些我们用普通手法无法下载的一些东西。比如说喜马拉雅。这些我们会在后面讲的。今天我向大家介绍一下如何用爬虫爬取一整本小说。
今天我们就使用python爬取一部小说(http://www.136book.com)。大家听说过大名鼎鼎的三体吗?今天我就带着大家爬取一下三体。进入这个网页之后首先要找到三体这本书,然后点开。
然后右击鼠标点击查看然后点击Network(新页面)然后点击第一个文件再点Headers将request url复制下来并保存。(一会要用)(说明我用的是Chrome游览器)
接下来正式讲一下代码的设计:
这里一共需要三个函数除去最后的调用的函数这个程序主要的就是前两个函数。
1、第一个函数用它来爬取三体这本小说的一个章节
2、第二个函数用它来爬取三体这本书的每一个章节的链接(url),然后把这些章节的url传给第一个函数,然后就可以爬取整本书了。
首先看第一个函数:
import requests
from pyquery import PyQuery as pq
def get_firstpage(base_url):
r = requests.get(url = base_url)
doc = pq(r.text)
p = doc('p')
word = p.text()
hi = doc("h1")
name = hi.text()
with open(name+".txt",'a+',encoding = "utf-8") as f:
f.write(name+"\n\n"+word)
先用import导入两个模块(如果还没有下载的话请打开命令行输入pip in install request/pyquery进行下载)as是一种重命名在这里也就是将PyQuery命名为pq这样我们可以方便我们在后面调用PyQuery方法。 然后开始定义函数def为python的关键字他的作用就是定义函数。定义一个名字为get_firstpage的函数并传入一个参数。这个参数就是每一章对应的链接(url)
1、用requests.get获取每一章节对应的HTML
2、然后把每一章节对应的HTML通过pq(PyQuery)方法传给doc
3、然后找p标签及其对应的文字
4、然后用p.text()方法将p标签下的文本选出来
1、用同样的方法我们得到li标签下的章节标题
2、然后用with open的方式打开文件名为章节名的文件注意一定要加上.txt
3、‘a’的意思是原文件如果不存在则创建,如果有则在文件末尾追加。+是在此基础上赋予读写的功能。指定编码方式为“utf-8”重命名为f
4、将章节标题和章节内容写入文件。章节内容和章节标题空两格
这就是第一个函数!趁热打铁继续看第二个函数:
def get_morepage(genery_url):
response = requests.get(genery_url)
html = response.text
doc1 = pq(html)
everyurl = doc1('#book_detail.box1 a')
for item in everyurl.items():
base_urls = item.attr.href
base_url = ''+base_urls
get_firstpage(base_url)
第二个函数和第一个函数方法上基本一样,仍然是使用requests.get得到所有章节的url所在的那个页面。然后通过pq方法将它传给doc1,然后调用doc1方法找到每一个章节对应的url.然后我们用for…in循环输出每一个a标签及其对应的链接。用item.attr.href选出每一个链接(url)。接下来这一步十分的重要,它是将每一个url变成字符串类型(我在这可是没少吃苦头啊。)最后直接将每一个url传入第一个函数。
def main():
genery_url = 'http://www.136book.com/santiheji/'
base_url = get_morepage(genery_url)
main()
调用主函数,运行程序。就会得到所有的章节的文本。(genery_url就是一开始保存的那个。)