<ENGLISH>
Hello - I hope you have a good day. Happy weekend should be happy cording day :smile:
Ok, today I will not proceed the scripting and I'd like to modify previous script. The script is below from #2:
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
c = 0
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
break
c += 1
response = urllib2.urlopen(url)
html = response.read()
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
p = re.compile(r'<.*?>')
text += p.sub('', con.encode('utf8'))
Yes, it works, but want to use (1) BeautifulSoup instead of regular expression and (2)Hash list instead of counting inside for.
(1) BeautifulSoup
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
p = re.compile(r'<.*?>')
text += p.sub('', con.encode('utf8'))
Regular Expression is strong tool, but I have to learn BeautifulSoup more. Beautiful Soup is using unique type for it's string, and we can check how to use it in user's guide. I modified it as below.
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
soup2 = BeautifulSoup(tag.encode('utf8'), "lxml")
print "".join([string.encode('utf8') for string in soup2.strings])
Looks smarter? :satisfied: you got another soup for getting strings. Which do you like?
(2) Hash List for splitting. Watch out!
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
c = 0
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
break
c += 1
To get splitter strings for each web site, used c as count up integer. That's not cool. So I modified as below.
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
numHash = {}
for i in range(len(scraper)):
numHash[scraper[i][0]] = i
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
c = numHash[domain[0]]
break
yes, it becomes longer, but I think it's much better than previous, isn't it?
Great, next I hope I can proceed to next step... It will be getting elements for learning.
Ja, Domo. Es ist ein Wochenende. Lass uns programmieren gehen, um ein gutes Wochenende zu haben. Heute möchte ich das Skript, das ich in # 2 gemacht habe, ändern, bevor ich fortfahre. Das ist es.
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
c = 0
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
break
c += 1
response = urllib2.urlopen(url)
html = response.read()
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
p = re.compile(r'<.*?>')
text += p.sub('', con.encode('utf8'))
Es funktioniert immer noch, aber die Änderungen lauten: (1) Verwenden Sie BeautifulSoup anstelle des regulären Ausdrucks zum Entfernen von Tags und (2) Verwenden Sie die Hash-Liste anstelle des Count-Ups für die Trennzeichenauswahl. Ich werde.
(1) Verwenden Sie schöne Suppe
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
p = re.compile(r'<.*?>')
text += p.sub('', con.encode('utf8'))
Reguläre Ausdrücke sind sehr praktisch, aber ich habe mich gefragt, ob ich Beautiful Soup effektiver machen könnte. In BS stehen Tools zum Extrahieren der darin enthaltenen Zeichenfolge zur Verfügung, die jedoch aufgrund des einzigartigen Zeichenfolgenformats zunächst schwierig waren. Es ist jedoch gut dokumentiert, so dass ich keine andere Wahl habe, als mich daran zu gewöhnen.
Und das ist nach der Änderung!
soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
soup2 = BeautifulSoup(tag.encode('utf8'), "lxml")
print "".join([string.encode('utf8') for string in soup2.strings])
Fühlt es sich nicht cool an? Ich habe die Suppe geändert, um die Zeichenkette im Tag durch erneutes Ersetzen herauszuziehen.
(2) Verwenden Sie eine Hash-Liste als Trennzeichen Ungefähr hier.
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
c = 0
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
break
c += 1
Es ist so, als würde man C-Variablen hochzählen und die Anzahl der Trennzeichen anpassen. Hmmm, wird es verrückt? Und schön verwandelt.
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
numHash = {}
for i in range(len(scraper)):
numHash[scraper[i][0]] = i
for domain in scraper:
print url, domain[0]
if re.search( domain[0], url):
c = numHash[domain[0]]
break
Das Skript ist länger geworden als ich erwartet hatte. Aber ich mag dieses sehr. Ich frage mich, ob ich es etwas sauberer machen kann.
Also habe ich diesmal eine selbstzufriedene Korrektur vorgenommen. Das nächste Mal denke ich, dass ich zum nächsten übergehen werde. Scraping von Links und Tag-Listen, aus denen man lernen kann. Wann kommen wir zum maschinellen Lernen? .. .. Es wird als Betrug bezeichnet.
Recommended Posts