Wie man einen effektiven Crawler in Python2.7 machtPython

Python-Programme
Anonymous
 Wie man einen effektiven Crawler in Python2.7 macht

Post by Anonymous »

Ich krieche einige Kleidung, um ihre Preise und ihre Informationen über jedes Produkt verfügbar zu erhalten, aber mit meinem tatsächlichen Algorithmus dauert es Tage, bis es fertig ist, und erhält jeden unterschiedlichen Link jedes Produkts. Wenn das Produkt beispielsweise über 5 Links für 5 Farben verfügt, hat es die 5 Links, und ich habe eine Datenbank mit 92K -Einträgen und nur 5K -Produkte wie folgt:
httpps://i.gyazo.com/410d4faa33e2fbccf8979c539999856565656566565665656656565656565656565665656656565665666666666666666dd3.png< />https://i.gyazo.com/b6118e67205d153272d ... efcfc8.png
gleiche Produkt -ID (so gleiches Produkt), aber unterschiedliche Link. Ich möchte nicht wieder darin kommen. Und ich möchte das gesamte Web kriechen, aber nur diejenigen besuchen, die Produkte enthalten ... aber ich weiß nicht, wie ich diese beiden Ideen implementieren soll.import urllib
import urlparse
from itertools import ifilterfalse
from urllib2 import URLError, HTTPError

from bs4 import BeautifulSoup

urls = {"http://www.kiabi.es/"}
visited = set()

def get_html_text(url):
try:
return urllib.urlopen(current_url.encode('ascii','ignore')).read()
except (IOError,URLError, HTTPError, urllib.ContentTooShortError):
print "Error getting " + current_url
urls.add(current_url)

def find_internal_links_in_html_text(html_text, base_url):
soup = BeautifulSoup(html_text, "html.parser")
links = set()
for tag in soup.findAll('a', href=True):
url = urlparse.urljoin(base_url, tag['href'])
domain = urlparse.urlparse(base_url).hostname
if domain in url:
links.add(url)
return links

def is_url_already_visited(url):
return url in visited

while urls:
try:
word = '#C'
current_url = urls.pop()
print "Parsing", current_url
if word in current_url:

print "Parsing", current_url
htmltext= urllib.urlopen(current_url).read()
soup= BeautifulSoup(htmltext)

[get the product info and save it into a SQL database]

html_text = get_html_text(current_url)
visited.add(current_url)
found_urls = find_internal_links_in_html_text(html_text, current_url)
new_urls = ifilterfalse(is_url_already_visited, found_urls)
urls.update(new_urls)

except Exception:
pass
< /code>
Zum Beispiel verwende ich in diesem Crawler das Wort "#C", um zu wissen, dass es sich um eine Produktseite handelt, und ich weiß nicht, wie man es unterscheidet, wenn diese URL eine Produkt -ID hat, die ich bereits besucht habe. Sei großartig

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post