2018-10-10 第一次爬虫

在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基础太差,连字符串比较都要百度。。。所以浪费了三个多小时的时间,罪过罪过

你可能感兴趣的:(2018-10-10 第一次爬虫)