在实际操作的时候,遇到了两个小难点。
1,soup.select的时候,没太好定位。于是复习了一下css选择器的知识。最终结局了。
2,open函数的使用!没想到可以用open函数来下载文件到本地!
以下程序能够正常运行,不过,也发现了几点不足之处。
前言,成功将百度贴吧的小说下载到本地,并且以txt的格式进行了保存,不过还有几次不够完美地方,需要我去修改和完善。
第一,下载到本地的txt文本,保存到本地的时候,是与对应的.py文件保存到同一个文件夹的,造成比较混乱。能不能用open函数或者其他方法把小说文件
保存到指定的文件夹目录下呢?
第二,用for遍历下载的时候,每个小说文件名字不能相同,怎么才能让名字更好看一些?
第三,每个下载的txt文件中,汉子段落都是乱的,怎么才能让它在下载的本地的时候就是摆好的呢?
第四, #当用open函数,以.txt文件结尾的时候,是可以储存并打开的。但是将参数,设置成.docx的时候,是没办法用word文件打开的,为何?
代码如下:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#爬去百度贴吧小说,并且以text格式保存到本地,联系一下保存数据。
import requests
from bs4 import BeautifulSoup
url = 'http://tieba.baidu.com/p/4944407708?see_lz=1'
headers = {
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36 QQBrowser/4.1.4132.400'
}
wb_data = requests.get(url,headers=headers) #必须加一个headers参数,因为没加之前,测试程序的时候被百度限制了。
soup = BeautifulSoup(wb_data.text,'lxml')
#content = soup.select('#post_content_102764747601') #这是默认的内容,由于数字是变化的,所以不能批量抓取页面下所有小说的内容!跟我之前遇到的情况不一样,要复杂一些。
content2 = soup.select('.j_d_post_content') #看了一下css选择器的知识,发现用class属性进行查找确定更准确,左边的已经成功。
t=1
for i in content2:
y = i.text
with open('小说 %s' %t + '.docx','w') as f:
#当用open函数,以.txt文件结尾的时候,是可以储存并打开的。但是将参数,设置成.docx的时候,是没办法用word文件打开的,为何?
t=t+1
f.write(y)
print('ok')