在b站看到《武林外传》的续写,质量颇高,甚是喜欢,然客户端阅读不便,遂爬至本地阅读。。。。。。。。第一册爬虫,赶鸭子上架似的,遇到了很多麻烦
步骤:
1,搜索python爬虫用到的技术:网络访问库requests,xml解析库BeautifulSoup,文件操作的方法
2,写代码:
主类main.py
import pa
import time
f = open('wulin.txt', 'a', encoding='utf-8') #a:append模式打开文件
for i in pa.getLinkList():
text = pa.getText(i)
f.write(text)
time.sleep(2) #每爬取一个网页后线程睡眠2s再进行下一次循环,等待将爬取的内容写入到文件。貌似不用等待也可以???
#此处可以改用线程队列实现(生产者消费者模式???)
######仔细思考了一下,这句确实多余,因为写文件和主线程睡眠是串行的。。。。。。。。。。用p-c模式才是真正实现了线程排序
f.close()
方法类pa.py
import re
import requests
from bs4 import BeautifulSoup
def getLinkList():
list = []
f = open("links.txt") #links.txt是一个包含文章列表地址的字符串文件,xml格式
s = BeautifulSoup(f.read(), "lxml")
str = '武林'
for tmp in s.find_all('a'):
if(str in tmp.get_text()): #过滤掉其他文章,即只爬取武林外传系列文章
list.append("https:" + tmp.get('href'))
return list
def getText(url): #爬取指定地址网页中的文章正文
r = requests.get(url)
s = BeautifulSoup(r.text, "lxml")
text = s.title.string #文章标题
list = ['查看专栏使用说明' ,
'申请成为专栏UP主' ,
'专栏帮助' ,
'up提醒:左右划动直接查看上下篇文章(每集两回)' ,
'点击专栏文集可以直接选择文章哦 O.O',
'本文禁止转载或摘编',
'成为创作者']
for div in s.find_all('p'): #由于在b站网页版中,正文的每一段都包含在p标签中,所以这里拿到所有的p标签,获取里面的文字
tmp = div.get_text();
if(tmp not in list): #过滤掉多余的段落
text += tmp + "\n"
return text
3.待解决问题:线程排序执行
其实这个项目根本没有难度,但奈何我python基础太差,连字符串比较都要百度。。。所以浪费了三个多小时的时间,罪过罪过