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
Wie man einen effektiven Crawler in Python2.7 macht ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post