在使用了我的刮擦脚本之后:
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很陌生,所以您能建议我如何从这个结果中获得事件名称、日期、事件类型吗?
谢谢!
发布于 2014-10-21 11:30:28
您可以使用stripped_strings属性提取每个组件并构造一个字典列表,如下所示:
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 '。
发布于 2014-10-21 11:29:32
您可以在输出端替换\n和\t
例如,可以使用re.sub函数替换。
import re
for val in titles:
print re.sub("[\n\t]", "", val)会产生产出
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功能
re.sub("[\n\t]", "", val)使用空字符串替换\n和\t。
https://stackoverflow.com/questions/26484951
复制相似问题