1

ファイルを読み込んで追加しようとしていますが、コンテキスト マネージャを使用しているとうまくいかないようです。

このコードでは、「serien」リストのアイテムの 1 つを含むサイト上のすべてのリンクを取得しようとしています。リンクがリストにある場合は、まずリンクが既にファイルにあるかどうかを確認します。リンクが見つかった場合、リンクを再度追加しないことになっています。しかし、そうです。

正しいモードを使用していないか、何らかの形でコンテキストマネージャーを台無しにしたと推測しています。それとも私は完全に間違っていますか

import requests
from bs4 import BeautifulSoup


serien = ['izombie', 'grandfathered', 'new-girl']
serien_links = []


#Gets chapter links
def episode_links(index_url):
    r = requests.get(index_url)
    soup = BeautifulSoup(r.content, 'lxml')
    links = soup.find_all('a')
    url_list = []
    for url in links:
        url_list.append((url.get('href')))
    return url_list

urls_unfiltered = episode_links('http://watchseriesus.tv/last-350-posts/')
with open('link.txt', 'a+') as f:
    for serie in serien:
        for x in urls_unfiltered:
            #check whether link is already in file. If not write link to file
            if serie in x and serie not in f.read():
                f.write('{}\n'.format(x))

コンテキストマネージャーを使用するのはこれが初めてです。ヒントをいただければ幸いです。

編集:コンテキストマネージャーのない同様のプロジェクト。ここでもコンテキストマネージャーを使用してみましたが、同じ問題が発生したためあきらめました。

file2_out = open('url_list.txt', 'a') #local url list for chapter check
for x in link_list:
    #Checking chapter existence in folder and downloading chapter
    if x not in open('url_list.txt').read(): #Is url of chapter in local url list?
        #push = pb.push_note(get_title(x), x)
        file2_out.write('{}\n'.format(x)) #adding downloaded chapter to local url list
        print('{} saved.'.format(x))


file2_out.close()

そして、コンテキストマネージャーを使用して:

with open('url_list.txt', 'a+') as f:
    for x in link_list:
        #Checking chapter existence in folder and downloading chapter
        if x not in f.read(): #Is url of chapter in local url list?
            #push = pb.push_note(get_title(x), x)
            f.write('{}\n'.format(x)) #adding downloaded chapter to local url list
            print('{} saved.'.format(x))
4

1 に答える 1

0

@martineauが言及f.read()したように、ファイル全体を読み取り、空の文字列を取得します。以下のコードを試してください。リストする内容を読み取り、後で比較がリストで行われます。

import requests
from bs4 import BeautifulSoup

serien = ['izombie', 'grandfathered', 'new-girl']
serien_links = []


# Gets chapter links
def episode_links(index_url):
    r = requests.get(index_url)
    soup = BeautifulSoup(r.content, 'lxml')
    links = soup.find_all('a')
    url_list = []
    for url in links:
        url_list.append((url.get('href')))
    return url_list


urls_unfiltered = episode_links('http://watchseriesus.tv/last-350-posts/')
with open('link.txt', 'a+') as f:
    cont = f.read().splitlines()
    for serie in serien:
        for x in urls_unfiltered:
            # check whether link is already in file. If not write link to file
            if (serie in x) and (x not in cont):
                f.write('{}\n'.format(x))
于 2016-01-13T15:40:57.380 に答える