Saya ingin menerapkan manipulasi string untuk halaman web seperti yang akan saya lakukan dengan file normal lokal baris demi baris seperti:

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

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

Namun ketika saya mencoba mengambil langsung halaman web dan kemudian mengubahnya menjadi utf-8 maka saya tidak lagi dapat mengurai baris demi baris, ini kode saya:

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)

Jadi apa yang saya lakukan salah di sini, apakah ini cara saya memecahkan kode halaman setelah menerimanya, perpustakaan yang saya gunakan, cara saya menggunakan string saya atau yang lainnya?

Ini hasil dari 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 Oktober 2019, 21:53

2 jawaban

Jawaban Terbaik

Jadi apa yang saya lakukan salah di sini?

Mengulangi objek file memberi Anda baris file, tetapi mengulangi string memberi Anda karakter individual (sebagai string panjang-1).

Anda perlu membagi string kembali menjadi baris sendiri, mis. dengan .splitlines().

2
Karl Knechtel 23 Oktober 2019, 19:06

Saya akan menggunakan BeautifulSoup untuk menyelesaikan tugas ini.

Berikut ini contohnya, memuat file html lokal:

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 Oktober 2019, 19:04