2017-05-22 12 views
0

ウェブサイトを削除して、私が望むコンテンツだけを提供しようとしました。htmlが正常に動作していない

<li tabindex="0"> 
    Facebook. 

    </li> 
    <li tabindex="0"> 
    Twitter. 

    </li> 
    <li tabindex="0"> 
    Pinterest. 

    </li> 
    <li tabindex="0"> 
    Instagram. 

    </li> 
    <li tabindex="0"> 
    Enter to Win. 

    </li> 

これは、私が削除しようとしていることの一部です。基本的に店舗広告私は、私が欲しくないものを取り除き、店の広告に残っているものを残すように取り組んでいます。

私はいくつかの非常に奇妙なことが起こっています。私はそれらのカップルの周りに取り組んだが、私はまだ何をしようと '\ n'を取り除くことはできません。

a = re.findall('<li tabindex(.*?)</li>', html, re.DOTALL) 
for x in range(0, len(a)): 
    a[x] = a[x].replace('="0">', '') 
    a[x] = a[x].replace('Enter to Win.', 'REMOVE') 
    a[x] = a[x].replace('Pinterest.\n \n', 'REMOVE') 
    a[x] = a[x].replace('Twitter.\n \n', 'REMOVE') 
    a[x] = a[x].replace('Instagram.\n \n', 'REMOVE') 
    a[x] = a[x].replace('Facebook.\n \n', 'REMOVE') 

私は「」...あなたは私はむしろ奇妙な方法で「のliのtabindex」をやってのける持っているか、それが正常にそれのように別々のラインを離れてspliltません気づくでフルダウンロードしたWebページを持っています。私は(a)を印刷すると完全に空になります。素早く奇妙なやり方で、別々のエントリを分割する方法を理解しました。

今、私は '\ n'を削除しようとしていますが、私が試しても削除することはできません。

a[x] = a[x].replace('\n', '') # doesn't work 
a[x] = a[x].replace('\n\n', '') # doesn't work 
a[x] = a[x].replace('\r\n', '') # doesn't work 
a[x] = a[x].replace('%s\n', '') # doesn't work 
a[x] = a[x].replace('%s\r\n', '') # doesn't work 
a[x] = a[x].rstrip('\r\n') # doesn't work 
a[x] = a[x].strip('\r\n') #doesn't work 

私は私がこれまでオンラインしようとすると、何も私は\ nを削除させることはありません見てきたすべてのものを試してみました。私は\ nの間に ''を取り除くことができますが、\ nは取り除くことができません。

'\ n'を削除するにはどうすればいいですか?また、重要な点として、私は標準のライン分割 'li tabindex'を実行するのに問題がありますか?何かが私に答えが1つと同じ原因かもしれないという気持ちを与えます。私は前にこのような問題があったことはありません。

更新、私が始めてきた元のコード:

import os 
import re 
from urllib.request import urlopen 
from urllib.error import HTTPError 
import urllib.request 

plot = 'https://circulars.save-a-lot.com/flyers/accessibility/savealot?locale=en-US&store_code=24607&type=2' 
htm = urlopen(plot).read() 
html = str(htm) 

a = re.findall("<li tabindex(.*?)</li>", html, re.DOTALL) 
for x in range(0, len(a)): 
    a[x] = a[x].replace('="0">', '') 
    a[x] = a[x].replace(' ', '') 

    b = '' 
    for c in range(2,int(len(a[x])-2)): 
     if a[x][c] == '\n': 
      continue 
     else: 
      b = b + a[x][c] 
    a[x] = b 
    a[x] = a[x].replace('Flipp.', 'REMOVE') 
    a[x] = a[x].replace('Instagram.', 'REMOVE') 
    a[x] = a[x].replace('Facebook.', 'REMOVE') 
    #etc removing what I don't want to keep 
    if a[x] == 'REMOVE': 
     continue 
    else: 
     #write file to disk 
+0

あなたは 'rstrip()'を試しましたか?同様に、 'a [x] .rstrip()' –

+0

rstrip()とrstip( '\ n')の組み合わせなど、それらはまったく削除しません。誰でも尋ねる前に... https://circulars.save-a-lot.com/flyers/accessibility/savealot?locale = en-US&store_code = 24607&type = 2私が取り組んでいるウェブページの1つです週刊セールス – confused

答えて

0
import bs4, requests 
sales_list = [] 
sales_list_stripped = [] 
url = 'https://circulars.save-a-lot.com/flyers/accessibility/savealot? \ 
locale=en-US&store_code=24607&type=2'#make sure to either put a '\' here 
            #to split the url between two lines 
            #or put it all on one line 

html = requests.get(url) 
html_soup = bs4.BeautifulSoup(html.text, 'lxml') 
filtered_html = html_soup.select('li') 

for x in filtered_html: #pulls text from within 'li' tags 
    sales_list.append(x.getText()) 

for x in sales_list: #removes \n character 
    sales_list_stripped.append(x.replace('\n', '')) 

print(sales_list_stripped[:8]) #test code 

このコードは、私にこのような出力を持つリスト[「週刊広告」、 『その他の70の項目』、「宴会ポットを得ましたパイ。 $ 0.69 ea。 7オンス、各種品種、 'Save-A-Lot®ソーダ12パック。 2/$ 5.00。 12オンス缶、様々な品種、 '、' J.Higgs Snacks。 $ 3.99 ea。 16 ct、Classic or Flavor Mix '、' Mondo Fruit Squeezers 'などがあります。 $ 0.99 ea。 40.5オンス、盛り合わせ品種、キギンズフロッキーフレーク、フルーティーリンガー、クロコウクランチシリアル。 $ 2.79 ea。 28オンス '、'キギンズトースタータルト。 $ 1.99 ea。 22オンス、様々な品種 '、' Nature Trailsグラノーラバー。 $ 1.79 ea。 8.4オンス、盛り合わせ品種 '、'トゥルーフルーツカップ。 10/$ 10.00。 7オンス、品揃え品種]

.findall()の大ファンではありません。select()は、bs4 documentationの推奨方法です。これが助けてくれるといいですか

+0

問題は私が余分に追加してもコードの最後に、あなたが逃しました)、私はまだNonetypeオブジェクトを取得するのは呼び出し可能なエラーではありません。 – confused

+0

うん、それは私のためにうまくいきましたあなたはあなたのコードの残りの部分を見ていますか? –

+0

私はあなたのコードを試していましたが、あなたが何かに似ているように思えるNonetypeエラー以外のものが私のために働くかどうかを調べることができました。いくつかの実験では、コードをダウンロードして\ nを '\'と 'n'と '\ n'の両方に渡すような感じです。与えられた行にいくつの文字があるのか​​を表示すると、 '\ n'の数は1ではなく2として表示されています。私はまだ特殊文字を取り除き、それ以前に対処するもの。 – confused

0

なぜ個々のキャラクターを取り除くためにこのようなトラブルが起こっていますか?ただregexは1つの急襲であなたのためのすべての汚い仕事をしてみましょう:

data = re.findall("<li tabindex.*?>\s+(.*?)\.?\s+.*?</li>", content) 
# ['Facebook', 'Twitter', 'Pinterest', 'Instagram', 'Enter to Win'] 

これでもスペースとコンテンツの後にドットと柔軟性を少し与えます。

関連する問題