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'
一応カタチにはなっているんですが、色々物足りない。
もっと改修しなきゃですね。
でも、サクッとこういうのが作れるのは本当に 楽しい!! ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌