Javascript 从存储在公共网站上的会议记录中删除对话
我目前正试图摘录我所在的地方议会进行的一系列讨论 我为每个记录的讨论提取了超过4000个唯一的URL。现在缺少的最后一步是为每个对话刮取元数据,并根据发言的人和正确的顺序分割文本 我的理想数据是: 第1行日期、头衔、发言人A的姓名、他说的话 第2行日期、头衔、B发言者的姓名、她说的话 我尝试过的: Webscraper.io是最有前途的。然而,它是随机排列的,因此我的发言都是杂乱无章的 iRobot和Import.io似乎无法识别Javascript Cloudscrape几乎没拿到,因为标签太乱了。对话以问题标签开始,前两个对话的回答标签。进一步的讨论都是使用topic标签追加的。(设计这个系统的人只想到了一个问题和一个答复) 背景: 我正在考虑将其解析回SQL,以便能够可视化数据并对其进行度量。我以前试过询问业主,但他们没有准备好原始数据。我已经窥视了数据的结构,与其访问凌乱的数据源,不如将其刮取下来Javascript 从存储在公共网站上的会议记录中删除对话,javascript,jsp,web-scraping,Javascript,Jsp,Web Scraping,我目前正试图摘录我所在的地方议会进行的一系列讨论 我为每个记录的讨论提取了超过4000个唯一的URL。现在缺少的最后一步是为每个对话刮取元数据,并根据发言的人和正确的顺序分割文本 我的理想数据是: 第1行日期、头衔、发言人A的姓名、他说的话 第2行日期、头衔、B发言者的姓名、她说的话 我尝试过的: Webscraper.io是最有前途的。然而,它是随机排列的,因此我的发言都是杂乱无章的 iRobot和Import.io似乎无法识别Javascript Cloudscrape几乎没拿到,因为
我曾尝试查看Beautifulsoup,但我仍然完全不知道该如何开始/它是否首先是正确的工具。我不久前写了一个爬虫,这有点过火,因为它两次调用beautiful soup,但这是我能找到的唯一方法,从页面中提取所有可见文本
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)
可能对你有一些用处我不久前写了一个爬虫程序,这有点过分了,因为它两次调用beautiful soup,但这是我能找到的从页面中提取所有可见文本的唯一方法
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)
可能会对您有所帮助网站上的javascript加载时间太长,并且会使大多数数据提取平台的请求超时。很可能您必须使用JS呈现工具呈现页面,等待几秒钟,然后才提取所需的数据。如果您正试图大规模且定期地进行此操作,那么就处理和渲染成本而言,成本可能很快就会增加到相当可观的水平。不过祝你好运:)网站上的javascript加载时间太长,并且会使大多数数据提取平台的请求超时。很可能您必须使用JS呈现工具呈现页面,等待几秒钟,然后才提取所需的数据。如果您正试图大规模且定期地进行此操作,那么就处理和渲染成本而言,成本可能很快就会增加到相当可观的水平。祝你好运:)