1. 程式人生 > >bs4爬取漫畫並寫入TXT文件

bs4爬取漫畫並寫入TXT文件

今天帶來的是爬取漫畫網站上的漫畫資訊及其連結

這次會用到bs4,也就是Beautiful Soup
我們先介紹一下**Beautiful Soup**:
Beautiful Soup 是一個可以從HTML或XML檔案中提取資料的Python庫.它能夠通過你喜歡的轉換器實現慣用的文件導航,查詢,修改文件的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間.

物件種類可以歸納為四種:

  • Tag
  • Navigable String
  • Beautiful Soup
    (Beautiful Soup物件表示的是一個文件的全部內容)
  • Comment

在這裡介紹一下,用bs4獲取所需內容的一些方法

  • soup.a
    通過點屬性獲取當前名字的第一個Tag
  • soup.find_all(‘a’)
    獲取所有的a標籤

這裡還要區分一下find()find_all()

  • find()
    函式只返回第一個所要查詢的節點標籤的型別
  • find_all()
    函式以列表的形式返回所有要查詢的節點標籤的型別

好了,接下來直接上程式碼

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests

url = 'https://manhua.dmzj.com/'
def get_page(finallyurl):
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
    headers = {'User-Agent': user_agent}
    data = requests.get(finallyurl,headers=headers).content
    return data
def get_manhua(html):
    fo = open("new.txt", 'a')
    fo.write('**********************第%s頁*************************\n'%i)
    fo.close()
    soup = BeautifulSoup(html,'html.parser')
    article = soup.find('div',attrs={'class':'newpic_content'})
    text = []
    for paragraph in soup.find_all("div",attrs={"class":"boxdiv1"}):
        p_content = paragraph.get_text()     #獲取所有關於文字的內容
        text.append(p_content)
        print p_content
        a=[]
        for link in paragraph.find_all(target="_blank"):
            lianjie = 'https://manhua.dmzj.com/' + link.get('href')
            a.append(lianjie)
            print lianjie
        end = a[1] + '\n' + p_content + '\n'
        #寫入文件
        one = end.encode('UTF-8')
        fo = open("new.txt", 'a')
        fo.write(one)
        fo.write('\n')
        fo.close()
        # 刪除文件中的空行
        f = open('new.txt')
        g = open('result.txt', 'w')
        try:
            while True:
                 line = f.readline()
                 if len(line) == 0:
                      break
                 if line.count('\n') == len(line):
                     continue
                 g.write(line)
        finally:
            f.close()
            g.close()
    return text
for i in range(1,4):
    finallyurl = url + 'update_' + str(i) + '.shtml'
    html = get_page(finallyurl)
    text = get_manhua(html)

結果展示
在這裡插入圖片描述