python爬虫之笔趣文学
我们来一起爬爬笔趣文学这个网站,仅仅作为学习来使用
1.获取URL和解析页面
随便找一篇文章:元尊
url:https://www.biqukan.com/0_790/
好了,知道这个页面结构,我们就可以进行解析了:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
response = requests.get(url).text
#解析网页
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('dl')
print(div)
结果:
[<dl>
<dt>《元尊》最新章节列表</dt>
<dd><a href="/0_790/22893899.html">第六百三十九章 过时</a></dd>
<dd><a href="/0_790/22883757.html">第六百三十八章 斗法</a></dd>
<dd><a href="/0_790/22873845.html">第六百三十七章 大战起</a></dd>
<dd><a href="/0_790/22862545.html">第六百三十六章 第三道圣纹</a></dd>
<dd><a href="/0_790/22850081.html">第六百三十五章 神秘玉璧</a></dd>
........
由此我们知道了每篇文章的名称和href
2.获取每篇文章的url和内容
我们随便打开一篇文章会发现,它的url是https://www.biqukan.com/0_790/22893899.html,和我们前面比较就是https://www.biqukan.com/0_790/+href的组合,由此我们就知道了每篇文章的url了。
我们先拿一片文章联系一下:
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
url_txt = 'https://www.biqukan.com/0_790/22893899.html'
#response = requests.get(url).text
#解析网页
#class_是为了避免和python中的关键字class冲突
#soup = BeautifulSoup(response,'lxml')
#div = soup.find_all('div',class_='listmain')
#print(div)
response = requests.get(url_txt).text
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('div',class_='showtxt')
print(div[0].text)
结果:
“而你们苍玄宗,已经过时了!” https://www.biqukan.com/0_790/22893899.html 请记住本书首发域名:www.biquka
郁闷,为什么内容显示不全,查了好久的资料,也没有查出个所以然来,希望大家知道赐教一下!!!
我分析了一下网页,发现我这样写没什么问题,猜测是不是编译器的原因,果然,我在cmd上运行,结果是对的,麻蛋,浪费时间。
3.保存数据
我们先采用写入文件的方式来保存
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
url_txt = 'https://www.biqukan.com/0_790/22893899.html'
#response = requests.get(url).text
#解析网页
#class_是为了避免和python中的关键字class冲突
#soup = BeautifulSoup(response,'lxml')
#div = soup.find_all('div',class_='listmain')
#print(div)
response = requests.get(url_txt).text
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('div',class_='showtxt')
print(div[0].text)
with open("2.txt",'a', encoding='utf-8') as f:
# f.write(name + '\n')
f.writelines(div[0].text)
f.write('\n\n')
我们会发现当前目录下出现了2.txt的文件,打开正是我们爬取的内容
4.整合代码
我们将目录和内容放在一起,爬取所有文章内所有章节的内容
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
class Biquwen(object):
def __init__(self):
self.url = "https://www.biqukan.com/0_790/"
self.url2 = "https://www.biqukan.com"
self.name = []
self.nums = []
self.urls = []
def get_url(self):
response = requests.get(self.url).text
#解析网页
#class_是为了避免和python中的关键字class冲突
soup = BeautifulSoup(response,'lxml')
divs = soup.find_all('dd')
self.nums = len(divs[12:])
for div in divs:
#取标签和路径
self.name.append(div.string)
self.urls.append(self.url2+div.a.get('href'))
'''
@获取每章节的内容
'''
def get_text(self,url2):
response = requests.get(url = url2).text
soup = BeautifulSoup(response,"lxml")
divs = soup.find_all('div',class_="showtxt")
divs = divs[0].get_text()
return divs
'''
@写入文件
'''
def write_text(self,name,path,tet):
with open(path,'a', encoding='utf-8') as f:
#print(tet)
f.write(name + '\n')
f.write(str(tet))
f.write('\n\n')
if __name__=="__main__":
bi = Biquwen()
bi.get_url()
for num in range(bi.nums):
#print(bi.get_text(bi.urls[num]))
bi.write_text(bi.name[num],"元尊.txt",bi.get_text(bi.urls[num]))
最后,我们会发现我们的文件夹下面有了元尊.txt这个文件,所有的内容也被写进去了。
OK,终于搞定了。