Sayısal olarak sipariş edilen birkaç yüzlerce html dosyası göz önüne alındığında, her biri birden fazla resim etiketine sahip, ancak yalnızca aradığım kimliği olan bir resim var.
<img title="$titleText" src="$imgURL" id="foo" border="0" />
nerede $imgURL ve $titleText Her sayfaya özgüdür ve sayfanın URL’si (tahmin edilebilir) olduğu için tahmin edilemez ve her sayfada istediğim resim id="foo" (her sayfada aynı, farklı veya kimliği olmayan diğer görüntüler).
Nasıl ayıklanırım $imgURL ve $titleText dizeleri bash?
Şimdiye kadar bir başlangıç noktasına bakıyorum
for count in `seq 1 400`;
do page="https://website/$count.html";
imgURL=[somehow get $imgURL from $page];
titleText=[somehow get $titleText from $page];
echo -e "$count\n$titleText\n$imgURL\n\n" >> some-file;
done
ancak parçaların parantez içinde nasıl gerçekleştirileceği hakkında hiçbir fikrim yok.
Muhtemelen en az ikisini içermesi gerekecek sed / grep / curl / wget.
Düzenleme: 95% JoW tarafından cevaplandı, son çift detayı takip ediyor
JoW beni doğru yöne çevirdikten sonra gerisini kolayca çözebildim. Yukarıdaki "başlangıç noktası" bash koduyla aynı amaçlanan etkiye sahip olan son komut dosyası şuydu:
#!/usr/bin/python
#
from bs4 import BeautifulSoup
import requests
for count in xrange(1, 400):
ct = str(count)
url = "website/" + ct + ".html"
data = requests.get("https://" +url)
soup = BeautifulSoup(data.text)
for link in soup.findAll("img", {"id": "foo"}):
with open('some-file', "a") as out:
out.write(ct + "\n" + link['title'] + "\n" + link['src'] + "\n\n")
id="foo" içinde <img ... /> etiket - diğer resimlerin kimlikleri farklı veya yok.
sed. Her zaman oldugu gibi man sed , man wget ... kullanımı | çıktıyı başka bir komutla borulamak için ...
<img ... /> ile etiketlemek id="foo" içinde? O kadar ileri gidersem, nasıl kullanılacağını çözmeliyim sed veya grep izole etmek $imgURL ve $titleText, ama denediğimde xmllint --html --xpath '//*[@id="foo"]' https://website/1.html Bir sürü hata aldım (ör. HTML parser error : htmlParseEntityRef: expecting ';' ) etiketine ek olarak aradım ve onlardan nasıl kurtulacağımı bulamadım (kullanarak --nowarning fark yaratmaz) - bunun ya da istenen sonucun netleştirilmesi için alternatif bir yaklaşımın nasıl düzeltileceği hakkında bir fikrin var mı?
pageindirmek zorundasınız (belki wget ile). StdOut ve filter'a yönlendirebilirsiniz (olabildiğince diske yazmamak için). Bu sayfada bulacağınız şeyi temiz bulmuyorum. Bireyselleştirmek zorundasın benzersiz Dosyanın sadece ilginç kısmını seçmenize izin verecek etiketler (eğer sayfada çok sayıda resim varsa, birçok etiketi<img .... />, ya da bu benzersiz çünkü hepsi tek bir etikette değil<img a>... </a>? Lütfen Düzenle gönderinizi daha iyi belirtmek için, cevap vermeye yardımcı olacaktır.