2016-06-29 2 views
1

Pycharmを使用したTheNewBostonのPython 3.4チュートリアルに従っています。現在、Webクローラーの作成方法に関するチュートリアルにあります。私は単にXKCDのコミックをすべてダウンロードしたいと思っています。非常に簡単だったアーカイブを使用する。ここにはmy codeがあり、その後にTheNewBostonが続きます。 コードを実行するたびに何も起こりません。それは実行され、「プロセスは終了コード0で終了しました」と言います。
NewBostonのチュートリアルは少し日付が付けられており、クロールに使用されたウェブサイトがドメインを変更しました。私は重要と思われるビデオの部分をコメントします。Python:BeautifulSoup4を使用した単純なWebクローラー

マイコード:

mport requests 
from urllib import request 
from bs4 import BeautifulSoup 

def download_img(image_url, page): 
    name = str(page) + ".jpg" 
    request.urlretrieve(image_url, name) 


def xkcd_spirder(max_pages): 
    page = 1 
    while page <= max_pages: 
     url = r'http://xkcd.com/' + str(page) 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text, "html.parser") 
     for link in soup.findAll('div', {'img': 'src'}): 
      href = link.get('href') 
      print(href) 
      download_img(href, page) 
     page += 1 

xkcd_spirder(5) 
+0

ビデオチュートリアル。 https://youtu.be/sVNJOiTBi_8?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_ –

+0

あなたは何がうまくいかないのか、質問をしましたか?それでも、 'page 'は' xkcd_spirder'の内部にしか存在せず、他の場所からは使用できないので、 'name_page'が未定義であるという' download_img'のエラーが発生すると思います。パラメータとして 'download_img'に渡す必要があります。 – TessellatingHeckler

+0

私はちょうど私があなたが意味すると仮定したことを試みました。まだ非常に新しい。ここに新しいコードがあります。以前と同じ問題。実際に私の問題を抱えているオリジナルの投稿を編集しました。そこに興奮して少し、ハハ。 http://pastebin.com/nv6X7S0M –

答えて

1

漫画にid 漫画とdivの中で、あなただけその内部でSRCからIMGを引っ張っする必要があり、その後にそれを参加DIV ベース URLと最後にコンテンツを要求し、書き込み、私はのベース名をファイルとして保存します。

私はまた、レンジループを使用している間に交換し、ちょうど要求を使用して、すべてのHTTP要求をした:

import requests 
from bs4 import BeautifulSoup 
from os import path 
from urllib.parse import urljoin # python2 -> from urlparse import urljoin 


def download_img(image_url, base): 
    # path.basename(image_url) 
    # http://imgs.xkcd.com/comics/tree_cropped_(1).jpg -> tree_cropped_(1).jpg - 
    with open(path.basename(image_url), "wb") as f: 
     # image_url is a releative path, we have to join to the base 
     f.write(requests.get(urljoin(base,image_url)).content) 


def xkcd_spirder(max_pages): 
    base = "http://xkcd.com/" 
    for page in range(1, max_pages + 1): 
     url = base + str(page) 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text, "html.parser") 
     # we only want one image 
     img = soup.select_one("#comic img") # or .find('div',id= 'comic').img 
     download_img(img["src"], base) 

xkcd_spirder(5) 

あなたは、コードを実行するとあなたは私たちが最初の5つの漫画を取得し表示されます。

関連する問題