2012-06-21 4 views
0

Я довольно новичок в python и обо всем остальном, о чем я собираюсь поговорить в этом вопросе, но я хочу начать с проекта, о котором я думал, когда-то сейчас , В основном я хочу сканировать веб-страницы и отображать URL-адреса, когда они просматриваются в реальном времени на веб-странице. Я закодировал простой искатель, который хранит URL-адреса в списке. Мне было интересно, как получить этот список в базе данных и обновить базу данных каждые x секунд, чтобы я мог обращаться к базе данных и периодически выводить список ссылок на веб-странице.Как хранить обходные данные в базе данных

Я не так много знаю о веб-разработке в режиме реального времени, но это тема для другого дня. Однако сейчас я больше беспокоюсь о том, как получить список в базе данных. В настоящее время я использую платформу web2py, с которой довольно легко ладить, но если у вас есть какие-то рекомендации относительно того, где я должен выглядеть, какие рамки я должен проверить ... просьба прокомментировать это тоже в ваших ответах, спасибо.

Вкратце, вещи, в которых я ноб в: Python, базы данных, веб-разработчик в режиме реального времени.

вот код на мой гусеничном, если это поможет в любом случае :) спасибо

from urllib2 import urlopen 
def crawler(url,x): 
    crawled=[] 
    tocrawl=[] 
    def crawl(url,x): 
     x=x+1 
     try: 
      page = urlopen(url).read() 
      findlink = page.find('<a href=') 
      if findlink == -1: 
       return None, 0 
      while findlink!=-1: 
       start = page.find(('"'), findlink) 
       end = page.find(('"'), start+1) 
       link = page[start+1:end] 
       if link: 
        if link!=url: 
         if link[0]=='/': 
          link=url+link 
          link=replace(link) 
         if (link not in tocrawl) and (link!="") and (link not in crawled): 
          tocrawl.append(link) 
       findlink = page.find('<a href=', end) 
      crawled.append(url) 
      while tocrawl: 
       crawl(tocrawl[x],x) 
     except: 
      #keep crawling 
      crawl(tocrawl[x],x) 
    crawl(url,x) 


def replace(link): 
    tsp=link.find('//') 
    if tsp==-1: 
     return link 
    link=link[0:tsp]+'/'+link[tsp+2:] 
    return link 

ответ

0

Вместо того, размещающая URL, в список, то почему бы не записать их в БД напрямую? используя, например, mysql:

import MySQLdb 
conn = MySQLdb.connect('server','user','pass','db') 
curs = conn.cursor() 
sql = 'INSERT into your_table VALUES(%s,%s)' %(id,str(link)) 
rc = curs.execute(sql) 
conn.close() 

Таким образом, вам не нужно управлять списком, подобным трубе. Но если это необходимо, это также можно адаптировать для этого метода.

+0

это обновляет базу данных, если она помещается в рекурсивный код, такой как мой, или перезаписывает данные в базе данных каждый раз, когда он вызывается? – sasogeek

+0

он будет добавлять новую строку каждый раз. поскольку web2py идет, я не использовал его раньше, но sqlite использует большинство стандартных sql-синтаксисов просто отлично. просто импортируйте sqlite3 вместо mysqldb, а строка подключения должна быть просто именем файла. например: 'conn = sqlite3.connect ('file')' –

0

Это хорошая работа для Redis, которая имеет встроенную структуру списка. Для того, чтобы добавить новый URL в список, это так просто, как:

from redis import Redis 
red = Red() 

# Later in your code... 
red.lpush('crawler:tocrawl', link) 

Он также имеет тип набора, который позволит вам эффективно проверить, какие сайты вы ползали и позволяют синхронизировать несколько искателей.

# Check if we're the first one to mark this link 
if red.sadd('crawler:crawled', link): 
    red.lpush('crawler:tocrawl', link) 

Чтобы получить следующую ссылку, чтобы ползать:

url = red.lpop('crawler:tocrawl') 

Чтобы узнать, какие адреса находятся в очереди на сканирование:

print red.lrange('crawler:tocrawl', 0, -1) 

Его только один вариант, но он очень быстрый и гибкий , Дополнительную документацию можно найти на странице redis python driver.

0

Для этого вам нужен Cron. Cron - это планировщик заданий для Unix-подобных компьютеров. Вы можете запланировать работу cron каждый раз, каждый час, каждый день и т. Д.

Ознакомьтесь с этим уроком http://newcoder.io/scrape/intro/, и это поможет вам в достижении того, чего вы хотите здесь.

Спасибо. Если это сработает.

Смежные вопросы