2017-01-19 3 views
1

私はwebMDに行くこのコードを書いて、これまでメッセージボードの各サブカテゴリからすべてのリンクを抽出しています。私が次にやるべきことは、プログラムがサブカテゴリリンクのすべてのページを通過するようにすることです。私は多くのことを試しましたが、私はいつも問題に直面していますか?Webクローラページの反復

import bs4 as bs 
import urllib.request 
import pandas as pd 


source = urllib.request.urlopen('https://messageboards.webmd.com/').read() 

soup = bs.BeautifulSoup(source,'lxml') 


df = pd.DataFrame(columns = ['link'],data=[url.a.get('href') for url in soup.find_all('div',class_="link")]) 
lists=[] 
for i in range(0,33): 
    link = (df.link.iloc[i]) 
    source1 = urllib.request.urlopen(link).read() 
    soup1 = bs.BeautifulSoup(source1,'lxml') 
+0

あなたは直面している問題は何ですか?あなたは傷病をチェックしましたか? – mmenschig

+0

問題は、私がサブリンクの最初のページに移動したときに、残りのページを続行する方法がわかりません。 – Data1234

+0

最初のサブリンクページにアクセスしたときは、さらにリンクや投稿のように、ソースを読んで、必要な情報を抽出する必要があります。あなたが探しているものはscrapy.orgのようです。 – mmenschig

答えて

0

これまでPythonとWgetを使用して、これまで同様の作業を行ってきました。 See Wget documentation here。ソースがどのように機能しているかを調べることができます。

基本的には次の操作を行うことができます。しかし、recursively通話はインターネット全体をダウンロードすることができなりますfollwoing擬似コード

alreadyDownloadedUrls = [] 
currentPageUrls = [] 

def pageDownloader('url'): 
    downaload the given URL 
    append the url to 'alreadyDownloadedUrls' list 
    return the given URL 

def urlFinder('inputPage'): 
    finds and returns all the URL of the input page in a list 

def urlFilter ('inputUrl or list of URLs'): 
    check if the input list of URLs are already in the 'alreadyDownloadedUrls' list, 
    if not appends that URL to a local list variable and returns 

def controlFunction(firstPage): 
    Download the first page 
    firstPageDownload = pageDownloader(firstPage) 
    foundUrls = urlFinder (firstPageDownload) 
    validUrls = urlFilter(foundUrls) 
    currentlyWorkingList = [] 
    for (the length of validUrls): 
     downloadUrl = pageDownloader(aUrl from the list) 
     append to currentlyWorkingList 
    for (the lenght of currentlyWorkingList): 
     call controlFunction() recursively 

を参照してください。 URLを検証し、親ドメインまたはサブドメインからのURLかどうかを確認する必要があります。 urlFilterFunctionでそれを行うことができます。

さらに、URLの最後にハッシュタグ付きの同じリンクをダウンロードしているかどうかを確認するために、さらに検証を加える必要があります。あなたのプログラムがthisthisと思う場合を除き、URLは別のページを指しています。

はまた、これはあなたにアイデアをクリア希望

のWgetのように深さの制限を導入することができます。