여러 URL 대상을 텍스트 파일에 저장

여러 URL 대상을 텍스트 파일에 저장

URL 목록이 있고 각 대상을 별도의 텍스트 파일에 저장하고 싶습니다.

다음은 URL이 포함된 입력 파일의 예입니다.

~$: head -3 url.txt 
http://www.uniprot.org/uniprot/P32234.txt
http://www.uniprot.org/uniprot/P05552.txt 
http://www.uniprot.org/uniprot/P07701.txt

저는 현재 이 작업을 수행하기 위해 Python 사용자 정의 함수를 사용하고 있습니다. 작동하지만 가장 불편한 점은 사용자가 URL을 수동으로 복사하여 붙여넣어야 하고(직접 파일 입력 없음) 출력의 각 줄 시작 부분에 일부 "b" 문자(? 바이너리)가 포함된다는 점입니다.

~$: head -3 P32234.txt
b' ID   128UP_DROME             Reviewed;         368 AA.
'b' AC   P32234; Q9V648;
'b' DT   01-OCT-1993, integrated into UniProtKB/Swiss-Prot.

이것은 파이썬 코드입니다:

def html_to_txt(): 
    import urllib.request 
    url = str(input('Enter URL: ')) 
    page = urllib.request.urlopen(url) 
    with open(str(input('Enter filename: ')), "w") as f: 
        for x in page: 
            f.write(str(x).replace('\\n','\n')) 
    s= 'Done' 
    return s

일부 Unix 유틸리티를 사용하여 이 작업을 수행하는 더 깔끔한 방법이 있습니까?

답변1

사용 -i옵션:

wget -i ./url.txt

에서 man wget:

-i 파일

--입력 파일 = 파일

로컬 또는 외부 파일에서 URL을 읽습니다. -가 파일로 지정되면 표준 입력에서 URL을 읽습니다. (리터럴 이름이 -인 파일에서 읽으려면 ./-를 사용하십시오.) 이 기능을 사용하면 명령줄에 URL이 표시될 필요가 없습니다. 명령줄과 입력 파일 모두에 URL이 있는 경우 명령줄의 URL이 먼저 검색됩니다. --force-html이 지정되지 않은 경우 파일에는 한 줄에 하나씩 일련의 URL이 포함되어야 합니다.

그러나 --force-html을 지정하면 해당 문서는 html로 처리됩니다. 이 경우 문서에 ""를 추가하거나 명령줄에서 --base=url을 지정하여 해결할 수 있는 상대 링크 관련 문제가 발생할 수 있습니다.

파일이 외부인 경우 Content-Type이 text/html과 일치하면 문서가 자동으로 html로 처리됩니다. 또한 지정하지 않으면 파일 위치가 암시적으로 기본 href로 사용됩니다.

답변2

wget이를 수행할 수 있는 옵션이 있습니다:

wget --input-file url.txt

한 줄에 하나의 URL을 읽어 url.txt현재 디렉터리에 순차적으로 다운로드합니다.

보다 일반적으로 다음을 사용할 수 있습니다.xargs이런 종류의 일을 위해서는 결합하십시오.wget또는curl:

xargs wget < url.txt
xargs curl -O < url.txt

xargs입력의 각 줄을 읽고 이를 사용자가 제공하는 명령에 대한 인수로 제공합니다. 여기서 명령은 wget또는 입니다 curl -O. 두 명령 모두 URL을 다운로드하여 현재 디렉터리에 저장합니다. < url.txt제공된 콘텐츠는 url.txt명령에 대한 입력으로 사용됩니다 xargs.


Python 코드의 문제점은 urllib에서 얻는 것이 다음과 같다는 것입니다.바이트그런 다음 데이터는 파일에 직접 인쇄되어 바이트를 문자열화합니다 b'abc\00\0a...'(바이트 리터럴이 기록되는 방식).

답변3

그리고 w3m:

echo 'http://unix.stackexchange.com/questions/148670/save-html-to-text-file' |
tee - - - | 
xargs -n1 w3m -dump | 
sed '/Save html/!d;N;N;N;N;N;N;N' 

제 생각에는 이것이 xargs필요하지도 않습니다. 물론 동시에 여러 URL을 설정하는 설정이 있지만 지금은 알아낼 수 없습니다. 어쨌든 xargs작동합니다.

Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt

답변4

다른 두 가지 방법이 있습니다:

wget $(<file)

그리고

while read -r link; do wget "$link"; done < file

관련 정보