pythonでWeb Scraperを試す

こんばんわ、syachiです。

 

本日ですが、とある本でweb scraperを作ってみようという項目があったため、

せっかくなので作ってみることにしました。

記述された内容だけでは完成しなかったので、一部自分で加筆してます。

また、せっかくなので一部の値を引数でとり、少し汎用的にしました。

 

import urllib.request
import sys
from bs4 import BeautifulSoup

class Scraper:
def __init__(self, site):
self.site = site

def scrape(self):
r = urllib.request.urlopen(self.site)
html = r.read()
parser = "html.parser"
sp = BeautifulSoup(html, parser)
#print("site count:" + str(len(sp)))

last_url = ""
collected_url = ""

for tag in sp.find_all("a"):
url = tag.get("href")
text = tag.get_text()
#print(url)
if url is None:
continue
if key_word in url:
print(text)
position = 0
for i in url:
position += 1
if i == "/":
break
last_url = site_url + url[position:]
if last_url != collected_url:
print(last_url)
collected_url = last_url

args = sys.argv

key_word = args[2]
site_url = args[1]
Scraper(site_url).scrape()

 

えー、見様見真似で作ったので色々汚いです。

とりあえずこれをbashで叩いてあげれば勝手にurlを取得します。

 

 

実行結果

 

(venv) 01:53:11 ~/PycharmProjects/webScraper/bin $ ./scrape_google_news.sh 

https://news.google.com/articles/CBMiUmh0dHBzOi8vdGhlaGlsbC5jb20vaG9tZW5ld3Mvc2VuYXRlLzQ3NTkwNi1zZW5hdGUtZ29wLXdhbnRzLXNwZWVkeS10cnVtcC1hY3F1aXR0YWzSAVZodHRwczovL3RoZWhpbGwuY29tL2hvbWVuZXdzL3NlbmF0ZS80NzU5MDYtc2VuYXRlLWdvcC13YW50cy1zcGVlZHktdHJ1bXAtYWNxdWl0dGFsP2FtcA?hl=en-US&gl=US&ceid=US%3Aen

Senate GOP wants speedy Trump acquittal | TheHill

https://news.google.com/articles/CBMia2h0dHBzOi8vd3d3LmZveG5ld3MuY29tL3BvbGl0aWNzL2JpZGVuLXNheXMtaGUtd29udC1jb21wbHktd2l0aC1zZW5hdGUtc3VicG9lbmEtaW4tdHJ1bXBzLWltcGVhY2htZW50LXRyaWFs0gFvaHR0cHM6Ly93d3cuZm94bmV3cy5jb20vcG9saXRpY3MvYmlkZW4tc2F5cy1oZS13b250LWNvbXBseS13aXRoLXNlbmF0ZS1zdWJwb2VuYS1pbi10cnVtcHMtaW1wZWFjaG1lbnQtdHJpYWwuYW1w?hl=en-US&gl=US&ceid=US%3Aen
Biden says he won't comply with Senate subpoena in Trump's impeachment trial

https://news.google.com/articles/CAIiEN-By0G_FAY3iFGPXzpTmLMqGQgEKhAIACoHCAowocv1CjCSptoCMPrTpgU?hl=en-US&gl=US&ceid=US%3Aen
Schumer said in 1999 Senate wasn't like a jury box and was 'susceptible to the whims of politics'

 

一応カタチにはなっているんですが、色々物足りない。

もっと改修しなきゃですね。

でも、サクッとこういうのが作れるのは本当に 楽しい!! ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌