2017-07-05 9 views
-1

私は2つの列:event_nameとevent_URLを持つデータベースをやっています。名前を取得せず、すべてのURLをevent_URL列に配置します。印刷:https://prnt.sc/fru1tr同じ行のすべてのリンク

コード:

import urllib2 
from bs4 import BeautifulSoup 
import psycopg2 

page = urllib2.urlopen('https://www.meetup.com/find/outdoors-adventure/?allMeetups=false&radius=50&userFreeform=London%2C+&mcId=c1012717&change=yes&sort=default') 
soup = BeautifulSoup(page, 'lxml') 

events = soup.find('ul', class_='j-groupCard-list searchResults tileGrid tileGrid--3col tileGrid_atMedium--2col tileGrid_atSmall--1col') 

A = [] 
B = [] 

try: 
    conn = psycopg2.connect("dbname='meetup' user='postgres' host='localhost' password='root'") 
except: 
    print 'Unable to connect to the database.' 

cur = conn.cursor() 

for event in events.findAll('li'): 
    text = event.findAll('h3') 
    if len(text) != 0: 
     A.append(text[0].find(text = True)) 
    url = event.find('a', href=True) 
    if len(url) != 0: 
     B.append(url['href']) 
    cur.execute("""INSERT INTO outdoors_adventure(event_name,event_url) VALUES(%s,%s)""", (tuple(A),tuple(B))) 
    conn.commit() 
    del A[:] 
    del B[:] 

答えて

0

インデントが右掲載のコードにある場合は、問題は、ネストされたforループにあるかもしれない:と、すべてのイベントのために、あなたが追加し、「B」リストページ上のすべてのリンク。あなたが試みることができる:

for event in events.findAll('li'): 
    text = event.findAll('h3') 
    if len(text) != 0: 
     A.append(text[0].find(text = True)) 
for link in events.findAll('li'): 
    url = link.find('a', href=True) 
    if len(url) != 0: 
     B.append(url['href']) 

以上、中にイベント名とイベントURL検索を保つ単一最初のテキスト、その後イベント

EDITのURLをフェッチし、forループ:あなたは使用することにより、名前の抽出を簡素化することができます

for event in events.findAll('li'): 
    text = event.h3.string.strip() 
    if len(text) != 0: 
     A.append(text) 
    url = event.find('a', href=True) 
    ... 

を(それは私の側にい)それはあなたのためのトリックをした場合、私に教えてください。

EDIT2: - その存在しますが、プレビューだけでタブを参照してくださいあなたのDBは、「名前を表示しない」ようで、なぜ問題は、(抽出された文字列がタブで始まっていることだけで事実かもしれないが、多分それはですか? )。それらを削除するにはstrip()を使用してください。

+0

これは次のようなものです:http://prntscr.com/frue62 –

+0

イベントの名前は挿入されますが、見ることはできません。ありがとう;) –

+0

'NoneType'オブジェクトに 'string'という属性がありません –

関連する問題