Неспособность отфильтровать строки элементов с сайта списка событий - PullRequest
0 голосов
/ 05 декабря 2018

Я изучаю Python3 для веб-скрейпинга, вот мой код:

import requests
url = 'https://beijing.douban.com/events/week-all'
req = requests.get(url)
from bs4 import BeautifulSoup

soup = BeautifulSoup(req.text,'html.parser')
events = soup.find('ul',{'class':'events-list'}).findAll('li')

for event in events:
    event_details = dict()
    event_details['title']= event.find('div',{'class':'title'})
f = open('douban8.txt','a',encoding='utf-8')
print(event_details,file=f)

Я получил результаты, как показано ниже:

**{'title': <div class="title">
<a href="https://www.douban.com/event/31568343/" itemprop="url" title="年度动作奇幻大片《海王》北京IMAX 3D零点场免费观影来了!">
<span itemprop="summary">年度动作奇幻大片《海王》北京IMAX 3D零点场免费观影来了!</span>
</a>
</div>}
{'title': None}
{'title': None}
{'title': None}
{'title': None}**

Все, что я хочу, это строка между тегами, ноЯ не могу избавиться от тегов из всего текста.Я пытался .string или .text и некоторые другие методы, все не удалось.Кто-нибудь может дать мне какой-нибудь совет, пожалуйста?

#

большое спасибо @ sohan-das, я обновляю код здесь:

import requests
url = 'https://beijing.douban.com/events/week-all'
req = requests.get(url)
from bs4 import BeautifulSoup

soup = BeautifulSoup(req.text,'html.parser')
events = soup.find('ul',{'class':'events-list'}).findAll('li')

for event in events:

    event_details=dict()
    try:
        event_details['title'] = event.find('div'{'class','title'}).text.strip()
        f = open('douban9.txt', 'a', encoding='utf-8')
        print(event_details, file=f)
    except AttributeError:
        pass
    continue

Это работает сейчас

1 Ответ

0 голосов
/ 05 декабря 2018

event_details нужно, чтобы список не диктовал и поместил его вне цикла.элемент в списке 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时」纪录片导演制作班第二季'}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...