赞
踩
- import requests
- from bs4 import BeautifulSoup
- url = "https://b.faloo.com/p/163306/1.html"
- r = requests.get(url)
- print(r.text)
- import requests
- from bs4 import BeautifulSoup
- url = "https://b.faloo.com/p/163306/1.html"
- try:
- r = requests.get(url) #解析网页
- r.raise_for_status #检查网页能否正常访问,不能则报错
- html = r.text #获取网页html
- soup = BeautifulSoup(html,'html.parser') #用html.parser解析器解析html
- div = soup.find_all("div",id = "content")[0] #查找名为div,id属性为content的标签,由于返回的是一个列表,因此取列表里的值
- print(div)
- except:
- print("出错了")
- import requests
- from bs4 import BeautifulSoup
- url = "https://b.faloo.com/p/163306/1.html"
- try:
- r = requests.get(url) #解析网页
- r.raise_for_status #检查网页能否正常访问,不能则报错
- html = r.text #获取网页html
- soup = BeautifulSoup(html,'html.parser') #用html.parser解析器解析html
- div = soup.find_all("div",id = "content")[0]
- div = div.text.replace(' ','\n\n'+' ')
- print(div)
- except:
- print("出错了")
- import os
- if not os.path.exists("D://1.txt"):
- f = open('D://1.txt','w')
- f.write('这是写入的内容')
- f.close()
- else:
- print("已存在相同文件名")
上述代码第一次执行结果如下:
我们打开第一章,看一下url。
我们发现,href前面加上一个“http:”正好就是我们想要章节的url!
那么我们就得到了获取章节链接的方法——通过获取<a>标签中的href
- import requests
- import os
- from bs4 import BeautifulSoup
-
- main_url = "https://b.faloo.com/f/163306.html" #指定带有章节链接的url
- chapter_names=[] #用于存放章节名
- url_list = [] #用于存放章节链接
- path = "D://与同居的大盗.txt" #指定一个根目录存放txt文件
- num = 0
-
- '''定义一个获取章节链接的函数
- 这个函数的作用是从main_url中提取出所有章节的链接
- 并且放到url_list中去,最后返回url_list
- 以供下一个函数使用
- '''
-
- def getUrl(url):
- try:
- r = requests.get(url)
- r.raise_for_status
- except:
- print("无法获取主网页,请确认主网页")
- html = r.text
- soup = BeautifulSoup(html,'html.parser')
- td = soup.find_all('td',class_ = "td_0")
- for each in td:
- url_ = 'http:' + each.a.attrs['href']
- url_list.append(url_)
-
- return url_list
-
-
- '''定义一个获取章节文本的函数
- 这个函数的作用是将每一章的文本内容提取出来并放到txt文件中去
- '''
- def getContent(list,path):
- if not os.path.exists(path):
- with open(path,'a',encoding = 'utf-8') as f: #这里将open()放在for循环之外是为了提高效率,避免重复地打开文件。并将编码方法改为utf-8,使其能识别特殊字符。如果不加这个encoding会报编码错误,因为windows系统默认的gbk编码方式识别不了文中的特殊字符。
- for url in list:
- try:
- r1 = requests.get(url) #解析网页 #检查网页能否正常访问,不能则报错
- r1.raise_for_status
- except:
- print("此"+item+"章节链接无法打开,请确认网页")
- html1 = r1.text #获取网页html
- soup1 = BeautifulSoup(html1,'html.parser') #用html.parser解析器解析html
- div = soup1.find_all("div",id = "content")[0]
- content = div.text.replace(' ','\n\n'+' ')
- f.write(content)
- f.close
- else:
- print('"D://"位置已存在"与校花同居的大盗.txt",请确认')
-
- getContent(getUrl(main_url),path)#调用函数
好了,至此,我们就完成了爬取一本书的工作。
但是,我们的代码还有很多要优化的地方,比如:
· 没有章节名
· 没有程序运行进度的提示。我们这次爬取的书比较小,如果是一本内容特别多地小说,python爬取所需要的时间会大大增加,没有进度提示的话会影响到用户的使用体验
那么,这些就是我们下一次要来完善的地方。
【未完待续】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。