2016-11-22 2 views
0

Я хочу искривить пример использования предложений от this site.Словарь web-скребок не возвращает примеры предложений

Вот исходный HTML страницы:

<vcom:examples lang="en" word="creep" count="4" filter="0" class="vcom_examples"> 

<div class="exampleBrowser hasNext"> 

<div class="domains"> 
<a href="javascript:void(0)" title="All Sources" class="selected">All Sources</a><a href="javascript:void(0)" title="Fiction" data-code="F">Fiction</a><a href="javascript:void(0)" title="Arts/Culture" data-code="A">Arts/Culture</a><a href="javascript:void(0)" title="News" data-code="N">News</a><a href="javascript:void(0)" title="Business" data-code="B">Business</a><a href="javascript:void(0)" title="Sports" data-code="S">Sports</a><a href="javascript:void(0)" title="Science/Med" data-code="M">Science/Med</a><a href="javascript:void(0)" title="Technology" data-code="T">Technology</a></div> 

<div class="container" style="height: auto;"> 
<div class="results" style="left: 0px;"> 

<ul> 
<li><div class="sentence"> 
If you believe their campaigns, it’s the choice between a <strong>creep</strong> and a crook.</div> 
<a target="_blank" class="source" href="https://www.theguardian.com/us-news/2016/nov/22/journalists-media-election-2016-donald-trump"> 
<span class="corpus">The Guardian</span> 
<span class="date">Nov 22, 2016</span></a> 
</li> 

<li> 
<div class="sentence"> 
From stingrays to spy planes, we are seeing the consequences of powerful surveillance technology <strong>creeping</strong> into local law enforcement without adequate limits. 
</div> 
<a target="_blank" class="source" href="http://www.slate.com/articles/technology/future_tense/2016/11/should_police_bodycams_come_with_facial_recognition_software.html"> 
<span class="corpus">Slate</span> 
<span class="date">Nov 22, 2016</span></a> 
</li> 

</ul></div></div> 

<div class="buttons"><a class="prev ss-navigateleft" title="prev">Prev</a><a class="next ss-navigateright right" title="next">Next</a></div></div></vcom:examples> 

и вот мой код Python:

import bs4 as bs 
import urllib.request 

sauce = urllib.request.urlopen('https://www.vocabulary.com/dictionary/creep').read() 
soup = bs.BeautifulSoup(sauce,'lxml') 

for examples in soup.find_all('p',class_ = 'sentence'): 
    print(examples.text) 

Это было успешно выскабливание значение слов таким же образом, как описано выше. Однако, когда я попытался очистить примеры предложений таким образом, он ничего не вернул.

Почему он не возвращает примеры предложений?

+1

Предложения находятся внутри тегов 'div', почему у вас есть' soup.find_all ('p', class_ = 'sentence') '? – mx0

+0

oh- извините. Я скопировал неправильный код. моя мисс. Я сделал это с 'div'. но это не сработает. –

ответ

0

Вы не можете получить это предложение с beautifulsoup4, потому что примеры загружаются позже из json. В HTML ответ, что секция выглядит следующим образом:

<vcom:examples lang="en" word="creep" count="4" filter="0" ></vcom:examples> 

И заполняется позже кодом из https://cdn.vocab.com/js/module-esekdz.js.

Вместо разбора весь HTML тела вы можете использовать этот минимальный фрагмент кода, чтобы получить примеры предложений непосредственно от JSON, просто выбрать слово, домен и максимальные результаты:

import requests 

search_word = 'creep' 
# "Fiction", "Arts/Culture", "News", "Business", "Sports", "Science/Med", "Technology" 
domains = [None, "F", "A", "N", "B", "S", "M", "T"] 

link = "https://corpus.vocabulary.com/api/1.0/examples.json" 

response = requests.get(link, params={'query': search_word, 'domain': domains[0], 'maxResults': 24}) 

if response.ok: 
    for example in response.json()['result']['sentences']: 
     print(example['sentence']) 
0

После многих испытаний с urllib.request.urlopen (или requests.get) и bs4, я также не смог получить класс sentence. Похоже, что ни один из методов не может получить все содержимое, как видно из веб-страницы. В этом случае, боюсь, вам придется использовать некоторые другие пакеты, например selenium.webdriver. Код может выглядеть следующим образом:

from selenium import webdriver 

chrome_driver_path = 'your_working_directory\\chromedriver.exe' 
mydriver = webdriver.Chrome(chrome_driver_path) 

mydriver.get('https://www.vocabulary.com/dictionary/creep') 
sentences = mydriver.find_elements_by_class_name('sentence') 

for sentence in sentences: 
    print(sentence.text) 

Вот video tutorial, что очень ясно и кратко, о том, как использовать «Селен/ChromeDriver» сделать веб выскабливание.

Смежные вопросы