Αυτό που δεν μου αρέσει είναι ότι είναι πολύ hard coded, δεν ξέρω πως ακριβώς εκφράζεται αυτό στα ελληνικά πιστεύω το καταλαβαίνεις. Επίσης πολλά αρχεία
Εγώ θα σκεφτόμουν να το κάνω ως έξης:
Mία μεγάλη datastructure με όλα τα στοιχεία για κάθε site
από την οποία θα παίρνω μόνο ότι χρειάζομαι
και μία μόνο συνάρτηση που θα επιστρέφει τα data
δηλαδή παράδειγμα
def crawl(site):
topic = site.topic
title = site.site
article = site.article
publish_time = site.publish_time
return {'topic':topic,
'title':title,
'article':article,
'publish_time':publish_time
}
Θα σου πω περισσότερα αργότερα γιατί δεν έχω χρόνο
Παράδειγμα που δεν είναι πλήρες
from bs4 import BeautifulSoup
import requests
def crawl(site):
topic = site.topic
return {'topic':topic}
def get_html(url):
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
html = requests.get(url,headers=headers).content.decode()
html = BeautifulSoup(html,'html.parser')
for script in html(["script", "style"]):
script.extract()
return html
class Site:
def __init__(self, where_topic,url):
self.where_topic=where_topic
self.html=get_html(url)
@property
def topic(self):
return self.html.find(*self.where_topic).text
και όταν το τρέχω
>>> altsantiri=Site(('h3',{'class':"entry-title td-module-title"}),'http://www.altsantiri.gr/')
>>> altsantiri.topic
'Άρειος Πάγος: Η επίσχεση εργασίας εκλαμβάνεται ως πρόθεση αποχώρησης από τη δουλειά'
>>> crawl(altsantiri)
{'topic': 'Άρειος Πάγος: Η επίσχεση εργασίας εκλαμβάνεται ως πρόθεση αποχώρησης από τη δουλειά'}
>>>