Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的String.find()有问题_Python_Html - Fatal编程技术网

Python中的String.find()有问题

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

我一直在为一个学校项目开发一个基本的网络爬虫/刮板。出于测试目的,正在从本地.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_'             # 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。显示中间结果与预期结果的偏差:输出,而不是注释。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。不要期望我们提供测试数据:只需用引发问题的测试用例替换您的文件读取。