试图剥离网站只给我想要的内容,而不是其他所有内容。
<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>
这是我试图剥离的部分内容。基本上是一个商店广告,我剥离了我不想要的东西,并留下了商店广告中剩余的东西。
我发生了一些非常奇怪的事情。我已经解决了其中几个问题,但我仍然无法摆脱&#39; \ n&#39;无论我尝试做什么,都可以。
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')
如果我已经完整下载了网页,那么你会注意到我必须完成“反馈”标签。以相当奇怪的方式,或者像往常一样将它们分开分开。当我打印(a)时,它会完全变空。只是一个快速幻想的方式,我想出了如何分开单独的条目。
现在我正试图删除&#39; \ n&#39;无论我尝试什么,我都无法将它们移除。
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。我可以删除&#39; &#39; \ n \ n \ n \ n之间但是我无法删除\ n \ n \ n \ n
。我需要做什么才能删除&#39; \ n&#39;也许同样重要的是,为什么我会遇到麻烦做标准线分离&#39; li tabindex&#39;?有些东西让我觉得答案可能是同一个原因。我以前从来没有遇到过这样的问题。
更新,原始代码我已经开始:
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 :(得分: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
此代码为我提供了一个列表,其输出如下['Weekly Ad','Other 70 items','Banquet Pot Pies。 $ 0.69 ea。 7盎司,什锦品种','Save-A-Lot®苏打12包。 2 / $ 5.00。 12盎司罐装,什锦品种,','J.Higgs Snacks。 3.99美元ea。 16克拉,经典或风味混合','Mondo水果榨汁机。 0.99美元ea。 40.5盎司,什锦品种','Kiggins Frosty Flakes,Fruity Ringers或CrocO Crunch Cereal。 2.79美元ea。 28盎司','Kiggins烤面包机馅饼。 1.99美元ea。 22盎司,什锦品种','自然小径格兰诺拉麦片棒。 $ 1.79 ea。 8.4盎司,什锦品种','真正的水果杯。 10 / $ 10.00。 7盎司,什锦品种']
我不是.findall()
的忠实粉丝,因为select()
是bs4 documentation的首选方法。希望这有帮助
答案 1 :(得分:0)
为什么你要经历所有这些麻烦才能摆脱个别的追逐者?让regex
一举为你完成所有肮脏的工作:
data = re.findall("<li tabindex.*?>\s+(.*?)\.?\s+.*?</li>", content)
# ['Facebook', 'Twitter', 'Pinterest', 'Instagram', 'Enter to Win']
这甚至可以在内容之后为空格和点提供一点灵活性。