我目前正在尝试抓取网站以获取某些信息,但遇到一些问题。
我目前有一个bs4.element.Tag元素,其中包含一些html和文本,当我执行“ variable.text”时,得到以下文本:
\n\nUlmstead Club\n\t\t\t\t\t911 Lynch Dr\n\n\t\t\t\t\t\tArnold, Maryland\t\t\t\t\t 21012\n\t\t\t\t\tUnited States\n(410) 757-9836 \n\n Get directions\n\n Favorite court \n\n\n\nTennis Court Details\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\tLocation type:\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tClub\t\t\t\t\t\t\t\t\t\n\n\n\n\t\t\t\t\t\t\t\t\t\tMatches played here:\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t0\t\t\t\t\t\t\t\t\t\n\n\n\n\t\t\t\t\t\t\t\t\t\t
我想要的是摆脱所有空白字符(\n
和\t
),以列表或任何可迭代的形式获取相关信息。
我已经尝试了很多正则表达式命令,但是最接近我的目标的是:re.split('[\t\n]',variable.text)
,我得到了以下内容:
['',
'',
'Ulmstead Club',
'',
'',
'',
'',
'',
'911 Lynch Dr',
'',
'',
'',
'',
'',
'',
'',
'Arnold, Maryland',
'',
'',
'',
'',
为了节省空间,我切断了很多输出。
我很迷失,任何帮助将不胜感激
答案 0 :(得分:1)
尝试在<body>
<main>
<!--Landing Page-->
<div id="landing">
<div id="landing-image">
<i><img src="/img/diamond"></i>
</div>
</div>
<!--Navigation Page-->
<section id="navigation">
</section>
<!--Developer Page-->
<section id="developer">
</section>
<!--Projects Page-->
<section id="projects">
</section>
<!--Contact Page-->
<section id="contact">
</section>
</main>
</body>
上进行拆分:
[\t\n]+
这似乎可行,因为它将消除输出数组中的空字符串条目。
答案 1 :(得分:0)
我的猜测是,这个简单的表达式也可能会有所帮助,
$usernames = array("John Kennedy", "Barrack Ohbama", "Abraham Lincon");
# ^
(?:\\n|\\t)
答案 2 :(得分:0)
您可以使用string.replace()
函数来摆脱\ n和\ t,实际上并不需要正则表达式(下一步,我用2个空格替换了\ n和\ t) :
variable.text = variable.text.replace("\n"," ")
variable.text = variable.text.replace("\t"," ")
如果您想将数据拆分为一个列表,则可以通过空格将其拆分,然后使用remove()
删除列表中的所有多余的空字符串(请注意,我不确定100%关于如何分离数据,我刚刚制定了符合我的数据分离逻辑的解决方案):
result = re.split("[\s]\s+",variable.text)
while ('' in result):
result.remove('')
这是完整的代码示例:
import re
teststring ="\n\nUlmstead Club\n\t\t\t\t\t911 Lynch Dr\n\n\t\t\t\t\t\tArnold, Maryland\t\t\t\t\t 21012\n\t\t\t\t\tUnited States\n(410) 757-9836 \n\n Get directions\n\n Favorite court \n\n\n\nTennis Court Details\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\tLocation type:\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\tClub\t\t\t\t\t\t\t\t\t\n\n\n\n\t\t\t\t\t\t\t\t\t\tMatches played here:\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t0\t\t\t\t\t\t\t\t\t\n\n\n\n\t\t\t\t\t\t\t\t\t\t"
teststring = teststring.replace("\n"," ")
teststring = teststring.replace("\t"," ")
#split any fields with more than 1 whitespace between them
result = re.split("[\s]\s+",teststring)
#remove any empty string fields of the list
while ('' in result):
result.remove('')
print(result)
结果是:
['Ulmstead Club', '911 Lynch Dr', 'Arnold, Maryland', '21012', 'United States', '(410) 757-9836', 'Get directions', 'Favorite court', 'Tennis Court Details', 'Location type:', 'Club', 'Matches played here:', '0']
答案 3 :(得分:0)
我会在从1开始然后为2的字符串上运行2个正则表达式
\s*(?:\r?\n)\s*
\n
https://regex101.com/r/EGTyKB/1
[ ]*\t+[ ]*
\t
https://regex101.com/r/XIyi44/1
这将清除所有空白残渣并将其变成
可读的文本块。
Ulmstead Club
911 Lynch Dr
Arnold, Maryland 21012
United States
(410) 757-9836
Get directions
Favorite court
Tennis Court Details
Location type:
Club
Matches played here:
0