爬虫怎麽爬 从零开始的爬虫自学 DAY26 python网路爬虫开爬7-规模扩大

前言

各位早安,书接上回我们将程序码成功加上储存的功能,我们今天要来使它的规模更大更方便使用

开爬-规模扩大

首先目前我们只会建一个档案存放资料
如果想要存取更大量资料只有一个档案是不行的
因为记事本一旦资料太多就会变得难以阅读
所以我今天以15页为目标 每个档案5页 建3个档案
在此之前
我们先利用之前学到的读档来让终端也输出我们抓到的内容
把原本的

print("爬完了")

改成

read = open("Pet_Get.txt", encoding="utf-8")
print(read.read())
read.close()

第一行开档
第二行印出读取出来的东西
第三行关档

执行结果
https://ithelp.ithome.com.tw/upload/images/20211009/20140149lcFvfbgpVW.jpg
可以看到把档案内的资料印出来了

接下来是利用多一个回圈建立更多档案并印出更多页
把原本用来写入的部分

file = open("Pet_Get.txt", "w", encoding="utf-8")
for i in range(1,4,1):
    infor = getData(infor)
    file.write("--------------------第"+str(i)+"页--------------------\n")
    for inf in infor:
        file.write(inf)
file.close()

改成

for x in range(1,4,1):
    file = open("Pet_Get"+str(x)+".txt", "w", encoding="utf-8")
    for i in range(1,6,1):
        infor = getData(infor)
        file.write("--------------------第"+str(i)+"页--------------------\n")
        for inf in infor:
            file.write(inf)
    file.close()

加一层回圈用来建立更多档案
并把档案名称编号
将原本一个档案内存三篇文章改成存五篇

执行後可以看到他一个一个新增了3个档案 就是这次执行的结果
https://ithelp.ithome.com.tw/upload/images/20211009/20140149xSZJfyZPKV.jpg
但是终端内的输出依然没变
因为他还是读取之前的 Pet_Get.txt
而不是新的 Pet_Get1.txt Pet_Get2.txt Pet_Get3.txt
所以下面读取的部分也要更新成读这三个档案
要加上去的回圈逻辑跟写入的一样

把原本

read = open("Pet_Get.txt", encoding="utf-8")
print(read.read())
read.close()
for x in range(1,4,1):
    read = open("Pet_Get"+str(x)+".txt", encoding="utf-8")
    print(read.read())
    read.close()

这样就会读取新建立的 Pet_Get1.txt Pet_Get2.txt Pet_Get3.txt 了
原本的 Pet_Get.txt 没用了已经可以删掉了

执行结果
https://ithelp.ithome.com.tw/upload/images/20211009/201401495cQttMJ50o.jpg
可以看到这里印出了三个档案量的内容 资料也都成功写入档案内

但是我发现了三个问题

1.第一行文章的原网址没有换行 导致第一篇文章被往後挤不好看

https://ithelp.ithome.com.tw/upload/images/20211009/20140149TKYSo8m3cF.jpg

2.文章原网址竟然是下一页的...

https://ithelp.ithome.com.tw/upload/images/20211009/20140149reEOhw2a2J.jpg

3.标题竟然越来越多???

Pet_Get1.txt

https://ithelp.ithome.com.tw/upload/images/20211009/20140149hzb7thnghO.jpg

Pet_Get2.txt

https://ithelp.ithome.com.tw/upload/images/20211009/201401495M6FYlqdDH.jpg

Pet_Get3.txt

https://ithelp.ithome.com.tw/upload/images/20211009/20140149vscHeZWtSE.jpg

有这些问题都是我在构思程序码时对程序设计不够了解导致的
扩大程序的规模也让这些原本没发现到的问题浮现出来
有这麽多问题可不能放任它们 明天我们就要来把这些问题解决了 顺便再优化一下程序

今天的程序码

import requests
import bs4

def getData(infor):
    headers = {"cookie" : "over18=1"}
    #建立headers用来放要附加的cookie
    request = requests.get(infor[0],headers = headers)
    #将网页资料利用requests套件GET下来并附上cookie
    data = bs4.BeautifulSoup(request.text, "html.parser")
    titles = data.find_all("div", class_ = "title")
    #解析网页原始码
    i = 1
    for title in titles:
        if title.a != None:
            if "兔" not in title.a.text:
                infor.insert(i, "https://www.ptt.cc"+title.a["href"]+" "+title.a.text+"\n")
                i = i+1
    #利用for回圈把资料放进infor[1]开始的位置内并筛选掉已被删除的文章
    prePage = data.find("a", class_ = "btn wide", text = "‹ 上页")
    newUrl = "https://www.ptt.cc"+prePage["href"]
    #抓取上页按钮内URL
    infor[0] = newUrl
    return infor
    #将newUrl放进infor[0]再把infor传出去
infor = ["https://www.ptt.cc/bbs/Pet_Get/index.html"]
#抓PTT领养版的网页原始码
for x in range(1,4,1):
    file = open("Pet_Get"+str(x)+".txt", "w", encoding="utf-8")
    for i in range(1,6,1):
        infor = getData(infor)
        file.write("--------------------第"+str(i)+"页--------------------\n")
        for inf in infor:
            file.write(inf)
    file.close()
#写入资料
for x in range(1,4,1):
    read = open("Pet_Get"+str(x)+".txt", encoding="utf-8")
    print(read.read())
    read.close()
#读取档案中资料并印出

早安闲聊区

你知道吗?

欧洲古代贵族会用放射性铀玻璃做的器皿吃饭生活导致有人生病喔

每日二选一

你去火锅吃到饱是会吃爆蔬菜的草食人还是吃爆肉类的肉食人呢


<<:  [2021铁人赛 Day25] Web Exploitation Web渗透题目 01

>>:  【Side Project】 (老板)订单清单UX功能实作2-ChcekBox

【Online Assessment】CS fundamentals、资结、演算法

前测是敲门砖,决定他们要不要和你面试, 我听说过有人前测找代打, 也碰过某个公司的前测题目同期完全一...

C#入门之类(补充)

前面我们有讲过 C# 中的类,今天我们补充点,关于类的继承的内容。 在实际的环境中,我们的对象都是不...

认识 C#

C# C# 读做 (see sharp), 是一个基於 .Net Framework 的通用, 多范...

Open API 概念

为什麽想写这个? 一样是在某次开会听到这个名词,脑中开始想说这跟api有什麽不一样,为什麽要特别加...

[Day17]-应用模组2

时间time模组 使用前要先import time Time()可以传回自1970/1/1以来的秒...