无法从事件列表站点过滤元素字符串

时间:2018-12-05 05:57:50

标签: python beautifulsoup

我正在学习用于Web Scraping的Python3,这是我的代码: 汇入要求 url ='https://beijing.douban.com/events/week-all' 要求= request.get(URL) 从bs4导入BeautifulSoup 汤= BeautifulSoup(req.text,'html.parser') events = soup.find('ul',{'class':'events-list'})。findAll('li') 对于事件中的事件:     event_details = dict()     event_details ['title'] = event.find('div',{'class':'title'}) f =打开('douban8.txt','a',encoding ='utf-8') 打印(event_details,file = f) 我得到的结果如下所示: ** {'title':} {'title':无} {'title':无} {'title':无} {'title':无} ** 我想要的只是标签之间的字符串,但是我无法摆脱整个文本中的标签。我尝试了.string或.text以及其他一些方法,但都失败了。有人可以给我一些建议吗? # 非常感谢@ sohan-das,我在这里更新代码: 汇入要求 url ='https://beijing.douban.com/events/week-all' 要求= request.get(URL) 从bs4导入BeautifulSoup 汤= BeautifulSoup(req.text,'html.parser') events = soup.find('ul',{'class':'events-list'})。findAll('li') 对于事件中的事件:     event_details = dict()     尝试:         event_details ['title'] = event.find('div'{'class','title'})。text.strip()         f =打开('douban9.txt','a',encoding ='utf-8')         打印(event_details,file = f)     除了AttributeError:         通过     继续 现在可以使用

1 个答案:

答案 0 :(得分:0)

event_details需要列出而不是dict,并将其放置在循环之外。 events列表中的元素有10个以上的元素需要过滤。

.....
events = soup.find('ul', {'class':'events-list'}).findAll('li')

event_details = []
for event in events:
    event_title = event.find('div', {'class':'title'})
    # if element not have div.title skip
    if event_title:
        event_details.append({'title' : event_title.text.strip()}) 

f = open('douban8.txt','a',encoding='utf-8')
print(event_details,file=f)

结果

[
  {'title': '年度动作奇幻大片《海王》北京IMAX 3D零点场免费观影来了!'},
  ....,
  {'title': '在被认可前,先让自己更专业!「42时」纪录片导演制作班第二季'}
]