Python中的String.find()有问题
我一直在为一个学校项目开发一个基本的网络爬虫/刮板。出于测试目的,正在从本地.txt文件读取网页,该文件本身只是网页html代码的副本 我的代码基本上如下所示:Python中的String.find()有问题,python,html,Python,Html,我一直在为一个学校项目开发一个基本的网络爬虫/刮板。出于测试目的,正在从本地.txt文件读取网页,该文件本身只是网页html代码的副本 我的代码基本上如下所示: page = '' with io.open('example.txt', 'r', encoding='utf-8') as file: for line in file: page += line file.close() search_term_1 = 'thing_t3_' # w
page = ''
with io.open('example.txt', 'r', encoding='utf-8') as file:
for line in file:
page += line
file.close()
search_term_1 = 'thing_t3_' # what I am actually searching for
search_term_2 = '<!DOCTYPE html' # example
search_term_3 = '<!DOCTYPE html>' # example
page.find(search_term_1) # this returns -1
page.find(search_term_2) # also returns -1
page.find(search_term_3) # returns 0, as it is the first thing in the document
print(type(page)) # prints <class 'str'>
print(type(search_term_1)) # prints <class 'str'>
page=''
将io.open('example.txt','r',encoding='utf-8')作为文件:
对于文件中的行:
页码+=行
file.close()文件
search_term_1='thing_t3_'#我实际上在搜索什么
search_term_2='如果您愿意使用内置的.find()以外的方法,我建议有两种解决方案:
解决方案1:
遍历文本文件中的每一行,并将其与要查找的内容进行比较
例如:
for line in page:
if search_term_1 in line.strip():
break # do something
我更喜欢的另一种方法是使用re
模块(regex)。
这允许您运行许多模式匹配操作
在此场景中,您可以使用re
模块中内置的.search()方法
示例代码:
if re.search(search_term_1, page): # returns not None if pattern found anywhere on the page
pass #do something
关于您的代码,需要注意两件事:
您有一个多余的page='
声明,您可以在其中实例化page=io.open('example.txt',r',encoding='utf-8')
此外,我认为search\u term\u 2
和search\u term\u 3
产生不同结果的唯一方法是标记输入的方法是否有错误
我在发布代码时把代码简化了。我还从一个文件中按搜索项读取,每个搜索项的结尾都有一个\n字符。这就是为什么我只能在搜索整行时匹配页面文件。这是不可能的。如果search_term_3返回0,则search_term_2也必须返回0。请记住,page
变量将包含换行符。您不妨只说page=file.read()
。请提供预期的see。显示中间结果与预期结果的偏差:输出,而不是注释。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。不要期望我们提供测试数据:只需用引发问题的测试用例替换您的文件读取。