首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BS4、Python和Selenium后解析文本

使用BS4、Python和Selenium后解析文本
EN

Stack Overflow用户
提问于 2014-10-21 10:53:48
回答 2查看 418关注 0票数 0

在使用了我的刮擦脚本之后:

代码语言:javascript
复制
from selenium import webdriver
from bs4 import BeautifulSoup
import csv

browser = webdriver.Firefox()
browser.get('http://dyn.com/about/events/')
html = browser.page_source
soup = BeautifulSoup(html)
titles = [tag.text for tag in soup.find_all('p','pubdate')]

我得到的结果是:

U‘n\n\t\tWEBINAR:如何将你的全球触角扩展到中国\xA0\t\t\t10月22日,2014\t\ To \n,U’n\t\tLAUNCH\u 2013旧金山,CA\xA0t\t\t\tOct 23-24,2014年\t\t\tAcquia与用户会议\ User,A\xA0\t\tNov 3-5,2014 \t\t2参展商出席\n',u‘\n\n\t\tCloud博览会\u2013圣克拉拉,CAxA0\t\tNov 4- 6,2014 t\n展览\n',u’\n\t\n 2014年全球承运人奖2014年\u2013阿姆斯特丹\xa0\tNov 4,2013年都柏林都柏林,爱尔兰\t\t\tNov 4- 6,2014 t\n tNov\n‘n’,u‘n\t\n\n\t 2013年欧洲巴塞罗那,西班牙\ 17 17- 19,2014 t\n展览\n',第一届乐高联赛锦标赛事件\xA0\t\tDec 6

我对python很陌生,所以您能建议我如何从这个结果中获得事件名称、日期、事件类型吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 11:30:28

您可以使用stripped_strings属性提取每个组件并构造一个字典列表,如下所示:

代码语言:javascript
复制
from selenium import webdriver
from bs4 import BeautifulSoup
import csv

browser = webdriver.Firefox()
browser.get('http://dyn.com/about/events/')
html = browser.page_source
soup = BeautifulSoup(html)

events = []
titles = soup.find_all('p','pubdate')
for title in titles:
    event = list(title.stripped_strings)
    events.append({
        'event_name': event[0],
        'event_date': event[1],
        'event_type': event[2:]    # there can be multiple event types so use a list
    })

>>> from pprint import pprint
>>> for event in events:
...     pprint(event)
{'event_date': u'Oct 22, 2014',
 'event_name': u'WEBINAR: How To Expand Your Global Reach To China',
 'event_type': [u'speak']}
{'event_date': u'Oct 23 - 24, 2014',
 'event_name': u'LAUNCH Scale \u2013 San Francisco, CA',
 'event_type': [u'attend']}
{'event_date': u'Nov 3 - 5, 2014',
 'event_name': u'Acquia Engage User Conference \u2013 Boston, MA',
 'event_type': [u'exhibit', u'attend']}
{'event_date': u'Nov 4 - 6, 2014',
 'event_name': u'Cloud Expo \u2013 Santa Clara, CA',
 'event_type': [u'exhibit']}
{'event_date': u'Nov 4, 2014',
 'event_name': u'The Global Carrier Awards 2014 \u2013 Amsterdam',
 'event_type': []}
{'event_date': u'Nov 4 - 6, 2014',
 'event_name': u'Web Summit \u2013 Dublin, Ireland',
 'event_type': [u'speak']}
{'event_date': u'Nov 17 - 19, 2014',
 'event_name': u'Velocity Europe \u2013 Barcelona, Spain',
 'event_type': [u'exhibit']}
{'event_date': u'Dec 6, 2014',
 'event_name': u'NH/VT FIRST LEGO League Championship Event',
 'event_type': [u'speak']}

您还可能希望将事件名称和事件位置拆分为字符串event[0]上的u' \u2013 '

票数 0
EN

Stack Overflow用户

发布于 2014-10-21 11:29:32

您可以在输出端替换\n\t

例如,可以使用re.sub函数替换。

代码语言:javascript
复制
import re

for val in titles:
     print re.sub("[\n\t]", "", val)

会产生产出

代码语言:javascript
复制
    WEBINAR: How To Expand Your Global Reach To China Oct 22, 2014speak
    LAUNCH Scale – San Francisco, CA Oct 23 - 24, 2014attend
    Acquia Engage User Conference – Boston, MA Nov 3 - 5, 2014exhibitattend
    Cloud Expo – Santa Clara, CA Nov 4 - 6, 2014exhibit
    The Global Carrier Awards 2014 – Amsterdam Nov 4, 2014
    Web Summit – Dublin, Ireland Nov 4 - 6, 2014speak
    Velocity Europe – Barcelona, Spain Nov 17 - 19, 2014exhibit
    NH/VT FIRST LEGO League Championship Event Dec 6, 2014speak

功能

代码语言:javascript
复制
re.sub("[\n\t]", "", val)

使用空字符串替换\n\t

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26484951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档