【发布时间】:2017-06-11 03:28:03
【问题描述】:
我在这里尝试做的是从不断重新加载信息的动态页面中检索数据。我设置它的方式是每 60 秒刷新一次。问题是,旧数据不会从页面中删除,因此当程序在刷新后遍历数据时,会出现重复。
注意:程序在开始时休眠,因为最初没有要抓取的消息。
我正在寻找一种方法或解决方案,以使用最后一条记录(在本例中为消息 [-1])作为搜索的起点,以防止重复。
感谢所有帮助!谢谢。
driver.get(URL)
while 1==1:
time.sleep(60)
chat_page = driver.page_source
chat_soup = BeautifulSoup(chat_page,'lxml')
messages = chat_soup.findAll('div', attrs={'class':'message first'})
for message in messages:
username = message.div.h2.span.strong.text
text = message.find('div', attrs={'class':'markup'}).get_text()
timestamp = message.find('span', attrs={'class':'timestamp'}).get_text()
today = str(datetime.date.today())
timestamp = timestamp.replace('Today', today)
usernames.append(username)
timestamps.append(timestamp)
texts.append(text)
print(timestamp, username," : ",text)
我创建了一个临时解决方案,可以在将每条记录输入我的 SQLite3 数据库之前对其进行检查。该程序可以通过使用“插入或忽略”来工作。不幸的是,该程序一直在检查重复项,因为它无法过滤掉已经被抓取的数据。以下是我的临时解决方案:
driver.get(URL)
while 1==1:
chat_page = driver.page_source
chat_soup = BeautifulSoup(chat_page,'lxml')
messages = chat_soup.findAll('div', attrs={'class':'message first'})
for message in reversed(messages):
username = message.div.h2.span.strong.text
usernames.append(username)
text = message.find('div', attrs={'class':'markup'}).get_text()
text = text.replace('"', '')
text = text.replace("'", "")
username = username.replace('"', '')
username = username.replace("'", "")
timestamp = message.find('span', attrs={'class':'timestamp'}).get_text()
today = str(datetime.date.today())
timestamp = timestamp.replace('Today', today)
isbot = message.find('span', attrs={'class':'bot-tag'})
if (isbot):
username = '(BOT) ' + username
sql = '''INSERT OR IGNORE INTO 'chats' ('timestamp', 'username', 'text') VALUES ("%s", "%s", "%s")''' % (timestamp, username, text)
conn.executescript(sql)
【问题讨论】:
标签: python algorithm loops beautifulsoup screen-scraping