我目前正试图提取我当地议会进行的一系列讨论。
我已经为每个记录在案的讨论提取了超过4000多个唯一的网址。现在最后一个缺失的步骤是刮取每个对话的元数据,并根据说话的人和正确的顺序拆分文本。
我的理想数据是: 第1行日期,标题,演讲者A的名字,他说的话 第2行日期,标题,演讲者B的名字,她说的话 ...
我尝试了什么: Webscraper.io一直是最有前途的。然而,它以随机顺序刮擦,因此我的演讲都混乱了。
iRobot和Import.io似乎无法获取Javascript
由于凌乱的标签,Cloudscrape几乎没有得到它。对话以问号标签开头,前两个对话的答案标签。使用主题标签附加了进一步的辩论。 (无论是谁设计了系统,都不会想到一个以上的问题和一个回复)
背景 我正在考虑将其解析为SQL,以便我可以可视化并为数据做指标。我之前尝试过问过业主,但他们没有准备好原始数据。我已经看了一下数据的结构,最好只是抓住它而不是访问凌乱的数据源。
我曾尝试过观察Beautifulsoup,但我仍然完全迷失于我应该如何开始/它是否是最适合的工具。
答案 0 :(得分:0)
我一会儿写了一个爬虫,这有点矫枉过正,因为它叫两次漂亮的汤,但这是我能找到从页面中拉出所有可见文字的唯一方法。
from bs4 import BeautifulSoup, Comment
import urllib
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import re
def get_all_words(page): # gets all visible text on webpage
soup = BeautifulSoup(page, "html.parser")
for element in soup(text=lambda text: isinstance(text, Comment)):
element.extract()
soup = BeautifulSoup(str(soup), "html.parser")
soup = soup.findAll(text=True)
visible_texts = filter(visible, soup)
words = []
for x in visible_texts:
for wrd in x.split():
valid = re.match('^[\w-]+$', wrd) is not None
if len(wrd) > 1 and valid:
words.append(str(wrd.encode("UTF-8")))
return words
def visible(element):
if element.parent.name in ['style', 'script', '[document]', 'head', 'title','link',',','.',' | ']:
return False
return True
page = urllib.urlopen('http://www...').read()
print get_all_words(page)
可能会对您有所帮助