我目前正在尝试在python中编写一个小剪贴板来构建一个worlist,使用维基百科随机网址搜索大多数不同单词的页面,我实际上遇到了问题,使其忽略空{{1标签并使函数在抛出初始循环之后再次查询url。
对不起Crappy的代码,但我对编程和python非常非常新,我自学了很抱歉最终的facepalm时刻。 :P
这是代码。
<p></p>
感谢您输入的一切。
答案 0 :(得分:0)
这是我的先发制人的答案,随着我获得更多信息,这可能会有所改变。
我的假设是,关于导致程序崩溃的空标签的问题源于这一行:
words = words.string
如果标记为空,string
可能不会显示属性words
。
试试这个:
for words in soup.findAll('p'):
word = words.string
if word != "\n":
wordlist.write(word)
print(word)
我不确定word
可能等于什么(在标记为空的情况下是否实际为"\n"
,或者您是否要检查修剪后的字符串版本是否为""
内容是<p>
或者你有什么),但这个想法仍然存在:你只想写这个词是否存在。
您提出的问题是跳过start()
代码,但也许您仍然可以通过不同的解决方案获得所需的行为...只需在内容为而不是空。
回答有关循环的问题......
我不确定您是否希望让您的程序不断地一遍又一遍地查询该服务器,只有这样才能阻止它成为键盘中断。但如果你必须......你应该能够递归地调用它:
def wiki_spider(): #所有代码,然后...... wiki_spider()
你甚至不需要wiki_spider()
方法。您可以在其自身内调用ctrl + c
(这称为递归)。
就像我说的那样,闻起来很有趣。只需记住在计算机爆炸之前点击<div class="parent">
<div class="child">
this is content ...
</div>
</div>
停止你的程序(夸大,但你明白了。)
答案 1 :(得分:0)
忽略严重调用的递归和文件写入:
尝试:
import requests
from bs4 import BeautifulSoup
url = "https://en.wikipedia.org/wiki/Special:Random"
while True:
sourcepage = requests.get(url)
plaintext = sourcepage.text
soup = BeautifulSoup(plaintext)
for words in soup.findAll('p'):
word = words.string
if word is None:
print("NO WORD")
else:
print(word)
这将&#34;过滤&#34;空标签和打印&#34; NO WORD&#34;你可以用&#39;传递&#39;
代替 <\ n>在else语句中,您将拥有有效的文本。