Я хочу применить строковые манипуляции для веб-страницы, как я сделал бы с локальным обычным файлом построчно, например:

save = []
ins = open("my_file.html", "r")

for line in ins:
    if "/html/" in line and "thumbs" in line:
        print(line)

Однако, когда я пытаюсь взять непосредственно веб-страницу и затем преобразовать ее в utf-8, я больше не могу анализировать построчно, вот мой код:

fp = urllib.request.urlopen(base + ".html")
mystr = fp.read()
mystr = mystr.decode("utf-8")

for line in mystr:
    if "/html/" in line and "thumbs" in line:
        print(line)

Так что же я здесь делаю не так, это то, как я декодирую страницу после ее получения, библиотеку, которую я использую, то, как я использую свою строку или что-то еще?

Вот результат cat my_file.html | head

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-4477008-1']);
  _gaq.push(['_trackPageview']);

  (function() {
1
Saxtheowl 23 Окт 2019 в 21:53

2 ответа

Лучший ответ

Так что я делаю не так здесь

Итерирование по объекту файла дает вам строки файла, но итерирование по строке дает вам отдельные символы (как строки длины 1).

Вам нужно будет разбить строку обратно на строки самостоятельно, например, с .splitlines().

2
Karl Knechtel 23 Окт 2019 в 19:06

Я бы использовал BeautifulSoup для выполнения этой задачи.

Вот пример загрузки локального HTML-файла:

from bs4 import BeautifulSoup
import re

url = "C:\\my_folder\\my_file.html"
page = open(url)
soup = BeautifulSoup(page.read())

divs = soup.find_all('div', {'class' : 'example'})

for div in divs:
    print (div)
0
Pitto 23 Окт 2019 в 19:04