有没有办法简化这个?删除文本中的内容,python

时间:2017-04-04 20:20:39

标签: python web-scraping beautifulsoup python-3.6

我只开始编写python一个星期,而且我正在解析和网络搜索网站。如何摆脱所有内容?尝试过几件事,但我似乎无法弄明白。帮助将非常感谢!

import re
import requests
import json
from bs4 import BeautifulSoup, NavigableString

url = 'http://www.grabexample.com'
geturl = requests.get(url)
some_text = geturl.text
soup = BeautifulSoup(some_text, "html.parser")
soup.prettify()

all_on_URL = soup.find_all('a')
grab_text = soup.get_text(strip=True)

parse_a_text = grab_text.replace("</a>", '').replace("<a>", '').replace("<a", '')
parse_p_text = parse_a_text.replace("</p>", '').replace("<p>", '').replace("<p", '')
parse_div_text = parse_p_text.replace("</div>", '').replace("<div>", '').replace("<div", '')
parse_li_text = parse_div_text.replace("</li>", '').replace("<li>", '').replace("<li", '')
parse_span_text = parse_li_text.replace("</span>", '').replace("<span>", '').replace("<span", '')
parse_img_text = parse_span_text.replace("</img>", '').replace("<img>", '').replace("<img", '')
parse_ul_text = parse_img_text.replace("</ul>", '').replace("<ul>", '').replace("<ul", '')
parse_ol_text = parse_ul_text.replace("</ol>", '').replace("<ol>", '').replace("<ol", '')
parse_label_text = parse_ol_text.replace("</label>", '').replace("<label>", '').replace("<label", '')
parse_h_text = parse_ol_text.replace("</h>", '').replace("<h>", '').replace("<h", '')
parse_h1_text = parse_h_text.replace("</h1>", '').replace("<h1>", '').replace("<h1", '')
parse_h2_text = parse_h1_text.replace("</h2>", '').replace("<h2>", '').replace("<h2", '')
parse_h3_text = parse_h2_text.replace("</h3>", '').replace("<h3>", '').replace("<h3", '')
parse_h4_text = parse_h3_text.replace("</h4>", '').replace("<h4>", '').replace("<h4", '')
parse_h5_text = parse_h4_text.replace("</h5>", '').replace("<h5>", '').replace("<h5", '')
parse_href_text = parse_h4_text.replace("href=", '').replace("<", '').replace(">", '')
parse_box_text = parse_h4_text.replace("[]", '').replace("[", '').replace("]", '')
parse_space_text = parse_box_text.replace("\n", "").replace("   ", "")
parse_colon_text = parse_space_text.replace("{", '').replace("}", '').replace("#", '')

print(parse_colon_text)

我尝试写它的另一种方法但是没有用,可能我在这里做错了什么?

def notusetags():
        invalid_tags= ['a', 'div', 'span', 'class', 'p', 'img', 'li', '\n']
        # get_text(strip=True)
        for tag in invalid_tags:
            for match in soup2.findAll(tag):
                match.replaceWithChildren('')

        print soup

我尝试写它的其他一些方法,但它没有用,可能我也错过了一些东西?

invalid_tags= ['a', 'div', 'span', 'class', 'p', 'img', 'li', '\n']
# get_text(strip=True)
for stripped in parse_text:
    if stripped.name in invalid_tags:
        s=""
        for c in stripped.contents:
            if not isinstance(c, NavigableString):
                c = stripped(unicode(c), invalid_tags)
            s+= unicode(c)
        stripped.replaceWith(s)
        testtext.append(stripped)

testtext = []

print(testtext)

1 个答案:

答案 0 :(得分:0)

因此,您的第一个代码看起来非常难看(据我所知,还包含两个复制和粘贴错误,请查看行parse_href_text = ...parse_box_text =)。正如其他人在评论中提到的那样,使用库来解析网站可能是更好的选择。

但是让我们来看看你的代码并尝试简化它:

所以首先你有不同的tags,并且你想删除每个</tag><tag><tag。你可以把它写成一个函数:

def remove_tag(text, tag):
    return text.replace("</{}>".format(tag), '').replace("<{}>".format(tag), '').replace("<{}".format(tag), '')

然后为所有标记调用此函数:

tag_list = ['a', 'p', 'div', 'li', 'span', 'img', 'ul', 'ol', 'label', 'h', 'h1', 'h2', 'h3', 'h4', 'h5']

for tag in tag_list:
    text = remove_tag(text, tag)

然后,删除其他项目:

others = ['href=', '<', '>', '[]', '[', ']', '\n', '   ', '{', '}', '#']

for s in others:
    text = text.replace(s, '')

全部放在一起:

import re
import requests
import json
from bs4 import BeautifulSoup, NavigableString

url = 'http://www.grabexample.com'
geturl = requests.get(url)
some_text = geturl.text
soup = BeautifulSoup(some_text, "html.parser")
soup.prettify()

all_on_URL = soup.find_all('a')
grab_text = soup.get_text(strip=True)

def remove_tag(text, tag):
    return text.replace("</{}>".format(tag), '').replace("<{}>".format(tag), '').replace("<{}".format(tag), '')

tag_list = ['a', 'p', 'div', 'li', 'span', 'img', 'ul', 'ol', 
            'label', 'h', 'h1', 'h2', 'h3', 'h4', 'h5']
for tag in tag_list:
    grab_text = remove_tag(grab_text, tag)

others = ['href=', '<', '>', '[]', '[', ']', '\n', '   ', '{', '}', '#']
for s in others:
    grab_text = grab_text.replace(s, '')

print(grab_text)