Найти - Пользователи
Полная версия: Как найти обычный текст на статической странице
Начало » Python для новичков » Как найти обычный текст на статической странице
1
tref
Привет всем!
Не могу никак найти как использовать обычный поиск. Есть файл my.txt, в нём несколько строк. Выгружаю из файла строки, и ищу их на странице HTML, если совпадает хоть одна строка, то останавливаю скрипт. Как такое осуществить?

Считываю файл так:
 f = open('my.txt')
line = f.readline()
while line:
	print (line),
	line = f.readline()
f.close()
Striver
Как такое осуществить?
Смотря что такое “обычный текст” и “обычный поиск”…

Пусть в переменной line находится строка, которую ищем, а в переменной html - содержимое html-страницы (со всеми тегами и прочей пакостью).

1) В самом простом варианте можно использовать простой поиск подстроки.
 ind = html.find(line)
if ind >= 0:
    # Здесь делаем нужные действия, когда строка найдена
Если содержимое line присутствует в явном виде, то этого хватит. Но есть подозрение, что тебя такой вариант не устроит, ведь между символами подстроки могут оказаться какие-то теги.

2) Можно попробовать перевести html-страницу в (почти) чистый текст:
 from bs4 import BeautifulSoup
soup=BeautifulSoup(html)
text = soup.text
ind = text.find(line)
if ind >= 0:
    # Здесь делаем нужные действия, когда строка найдена

3) Можно ещё подстраховаться на случай, когда между словами подстроки встречается больше одного пробела или переходы на следующую строку. Для этого и выделенный из html текст, и подстроку надо разбить на списки слов, а затем соединить обратно.
 line = ' '.join(line.split())
text = ' '.join(text.split())

4) Часто при текстовом поиске приходится приводить все символы в тексте и в искомой подстроке к нижнему регистру, чтобы не зависеть от того, где кто-то поставил большую букву, а где нет.
 line = line.lower()
text = text.lower()



tref
Striver
Смотря что такое “обычный текст” и “обычный поиск”…
Спасибо за развернутый ответ!
Решилось таким образом:
В input1.txt и input2.txt в каждой строке артикул.
 import requests
urls_ = ['http://localhost/1', 'http://localhost/2']
filenames_ = ['input1.txt', 'input2.txt']
 
 
def func(urls, filenames):
	browser = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' +\
		'AppleWebKit/537.36 (KHTML, like Gecko) ' +\
		'Chrome/71.0.3578.98 Safari/537.36'
	headers = {'User-Agent': browser}
	for url in urls:
		html = requests.get(url=url, headers=headers).text
		for filename in filenames:
			with open(filename) as f:
				for line in f:
					if line.rstrip() in html:
						print(f'Нашёл строку "{line}" на странице {url}')
						return
						
func(urls_, filenames_)
Но загвоздка в localhost. Страниц 1000, пытаюсь перебрать их random, чтобы не выписывать каждую страницу.
Что то делаю не так, вылазит ошибка по random
 import requests
import random
filenames_ = 'input1.txt'
def run():
	try:
		while 5 > 1:
			browser = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' +\
				'AppleWebKit/537.36 (KHTML, like Gecko) ' +\
				'Chrome/71.0.3578.98 Safari/537.36'
			headers = {'User-Agent': browser}
			pageNum = random.randrange(1,1000)
			fullurl = 'http://localhost/'+str(pageNum)
			for url in fullurl:
				html = requests.get(url=url, headers=headers).text
				for filename in filenames:
					with open(filename) as f:
						for line in f:
							if line.rstrip() in html:
								print(f'Нашёл строку "{line}" на странице {url}')
	except:
		run()
		
run()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB