Strategie für Web-Seiten Schaben, Informationen zu maximieren gesammelt

stimmen
2

Hier ist das Problem:

Benutzer für eine Website registrieren und können eine von 8 Jobkategorien wählen, oder wählen Sie diesen Schritt überspringen. Ich mag die Benutzer klassifizieren, die diesen Schritt in Jobkategorien übersprungen haben, basierend auf den Domain-Namen in ihrer E-Mail-Adresse.

Aktuelle Einstellung:

Mit einer Kombination aus Schöner Suppe und nltk, kratze ich die Homepage und suchen Sie nach Links zu Seiten auf der Website, die das Wort „über“ enthalten. Ich kratzen die Seite auch. Ich habe das Stück Code kopiert, die das Kratzen am Ende dieses Beitrags tut.

Das Thema:

Warum bekomme ich nicht genug Daten, eine gute Lernroutine in Platz zu bekommen. Ich würde gerne wissen, ob mein Schaben Algorithmus für den Erfolg eingestellt ist - mit anderen Worten, gibt es irgendwelche klaffenden Löcher in meiner Logik, oder ein besserer Weg, um sicherzustellen, dass ich ein gutes Stück Text habe, welche Art von Arbeit beschreibt ein Unternehmen, das tut?

Der (relevanter) Code:

import bs4 as bs
import httplib2 as http
import nltk


# Only these characters are valid in a url
ALLOWED_CHARS = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=


class WebPage(object):
    def __init__(self, domain):
        
            Constructor

            :param domain: URL to look at
            :type domain: str
        
        self.url = 'http://www.' + domain

        try:
            self._get_homepage()
        except: # Catch specific here?
            self.homepage = None

        try:
            self._get_about_us()
        except:
            self.about_us = None

    def _get_homepage(self):
        
            Open the home page, looking for redirects
        
        import re

        web = http.Http()
        response, pg = web.request(self.url)

        # Check for redirects:
        if int(response.get('content-length',251)) < 250:
            new_url = re.findall(r'(https?://\S+)', pg)[0]
            if len(new_url): # otherwise there's not much I can do...
                self.url = ''.join(x for x in new_url if x in ALLOWED_CHARS)
                response, pg = web.request(self.url)

        self.homepage = self._parse_html(nltk.clean_html(pg))
        self._raw_homepage = pg

    def _get_about_us(self):
        
            Soup-ify the home page, find the About us page, and store its contents in a
            string
        
        soup = bs.BeautifulSoup(self._raw_homepage)
        links = [x for x in soup.findAll('a') if x.get('href', None) is not None]
        about = [x.get('href') for x in links if 'about' in x.get('href', '').lower()]

        # need to find about or about-us
        about_us_page = None
        for a in about:
            bits = a.strip('/').split('/')
            if len(bits) == 1:
                about_us_page = bits[0]
            elif 'about' in bits[-1].lower():
                about_us_page = bits[-1]

        # otherwise assume shortest string is top-level about pg.
        if about_us_page is None and len(about):
            about_us_page = min(about, key=len)

        self.about_us = None
        if about_us_page is not None:
            self.about_us_url = self.url + '/' + about_us_page
            web = http.Http()
            response, pg = web.request(self.about_us_url)
            if int(response.get('content-length', 251)) > 250:
                self.about_us = self._parse_html(nltk.clean_html(pg))

    def _parse_html(self, raw_text):
        
            Clean html coming from a web page. Gets rid of
                - all '\n' and '\r' characters
                - all zero length words
                - all unicode characters that aren't ascii (i.e., &...)
        
        lines = [x.strip() for x in raw_text.splitlines()]
        all_text = ' '.join([x for x in lines if len(x)]) # zero length strings
        return [x for x in all_text.split(' ') if len(x) and x[0] != '&']
Veröffentlicht am 03/04/2013 um 22:08
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Es ist außerhalb dessen , was Sie fragen, aber ich würde Blick auf eine externe Datenquelle aufrufen , die diese Informationen bereits gesammelt hat. Ein guter Ort , um einen solchen Dienst auf dem sein würde , Programmierbare Web (zB Mergent Firma Fundamentals ). Nicht alle Daten auf programmierbare Web ist up-to-date , aber es scheint , wie viele API - Anbieter da draußen sind.

Beantwortet am 04/04/2013 um 19:28
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more