Hi, this is Chogo again. Today is cool day and good day for programing inside warm home :)
So today topic is Scraping again. before that, I'd like to explain my goal of this series. My goal is building a system for tag suggesting with machine learning of Bayesian method. Learning articles and tags I already put on then checking articles for suggesting tags. I have to many things to learn so I don't know how many articles for the goal, I will do one by one.
Ok so now today's topic is still scraping. article #1 I explained how to scrape articles from Hatenablog. However this script was only for Hatenablog. I have to extend this script for other web sites.
First i'd like to show you modified script.
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'))
This script can scrape articles from Hatana Blog and Qiita. Below are tags of Hatena blog and Qiita.
Hatena Blog:
<div class=entry-contents>
CONTENTS to SCRAPE!
</div>
Qiita:
<div class="col-sm-9 itemsShowBody_articleColumn"><section class="markdownContent markdownContent-headingEnabled js-task-list-container clearfix position-relative js-task-list-enabled" id="item-xxx" itemprop="articleBody">
CONTENTS to SCRAPE!
</div>
So with BeautifulSoup, I wrote up like this. Feeding the elements for the soup...
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
then, have the soup!
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]}
Good. now I can get the elements for soup for each web site, I can extend the scrape article on other sites!
Je vais à Umemura. Il fait froid aujourd'hui. Lors d'une journée comme celle-ci, ne jouez pas dehors, programmez simplement dans une pièce chaude.
Bon, c'est une continuation du grattage, mais avant ça, j'aimerais expliquer mon objectif cette fois. L'objectif sera un système d'estimation de balises utilisant l'apprentissage automatique. C'est un substitut pour apprendre les articles mis en signet que j'ai personnellement étiquetés, puis essayer d'estimer les balises qui se trouvaient dans l'article en utilisant la méthode Basian. Il est donc devenu clair qu'il y a beaucoup de choses à retenir au fur et à mesure, il est donc indécis combien de temps cette série se poursuivra. Je me demande si ça va finir.
Eh bien le sujet principal. Ce sera grattage après la dernière fois. La dernière fois, c'était un script pour extraire la partie de l'article du blog Hatena, mais bien sûr, il faut l'extraire de l'article d'autres sites. Par conséquent, il est nécessaire de le modifier pour qu'il soit polyvalent.
Ainsi, vous pouvez voir le script modifié immédiatement.
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'))
Ce script extrait la partie entrée du blog Hatena et des articles Qiita. Chaque entrée est entourée des balises suivantes.
Hatena Blog:
<div class=entry-contents>
CONTENTS to SCRAPE!
</div>
Qiita:
<div class="col-sm-9 itemsShowBody_articleColumn"><section class="markdownContent markdownContent-headingEnabled js-task-list-container clearfix position-relative js-task-list-enabled" id="item-xxx" itemprop="articleBody">
CONTENTS to SCRAPE!
</div>
Ensuite, spécifiez la partie requise pour le jugement de balise de Beautiful Soup comme suit.
scraper = [
["hatenablog.com","div","class","entry-content"],
["qiita.com","section","itemprop", "articleBody"]
]
Ensuite, prenez une soupe!
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]}
Ce sera comme ça. Si vous ajoutez les informations de balise du site dont vous souhaitez extraire l'article, vous pouvez l'appliquer à d'autres sites.
C'est tout pour aujourd'hui, mais cette série est toujours en cours.
Recommended Posts