2017-10-16 1 views
1

Une question simple. je peux gratter les résultats de la première page d'une recherche duckduckgo. Cependant, j'ai du mal à entrer dans la deuxième et les pages suivantes. J'ai utilisé Python avec le webdriver Selenium, ce qui est bien pour les résultats de la première page. Le code que je l'ai utilisé pour gratter la première page: -Grattage de Duckduckgo avec Python 3.6

results_url = "https://duckduckgo.com/?q=paralegal&t=h_&ia=web" 
browser.get(results_url) 
results = browser.find_elements_by_id('links') 
num_page_items = len(results) 
for i in range(num_page_items): 
    print(results[i].text) 
    print(len(results)) 

nxt_page = browser.find_element_by_link_text("Load More") 
if nxt_page: 
    nxt_page.send_keys(Keys.PAGE_DOWN)" 

Il y a des sauts de ligne indiquant le début d'une nouvelle page, mais ils ne semblent pas modifier l'URL, donc j'ai essayé ci-dessus de se déplacer vers le bas la page, puis répétez le code pour trouver les liens sur la page suivante. Cependant cela ne fonctionne pas. Toute aide serait très appréciée

Répondre

0

Si je cherche Load More dans le code source du résultat je ne le trouve pas. Avez-vous essayé d'utiliser la version non-javascript?

Vous pouvez l'utiliser en ajouter simplement html à l'url: https://duckduckgo.com/html?q=paralegal&t=h_&ia=web Vous y trouverez le bouton next à la fin.

Celui-ci fonctionne pour moi (version Chrome):

results_url = "https://duckduckgo.com/html?q=paralegal&t=h_&ia=web" 
browser.get(results_url) 
results = browser.find_elements_by_id('links') 
num_page_items = len(results) 
for i in range(num_page_items): 
    print(results[i].text) 
    print(len(results)) 
nxt_page = browser.find_element_by_class_name('btn--alt') 
if nxt_page: 
    browser.execute_script('arguments[0].scrollIntoView();', nxt_page) 
    nxt_page.click() 

Btw .: DuckDuckGo fournit aussi une belle api, ce qui est probablement beaucoup plus facile à utiliser;)

+1

Merci pour cela. J'utilisais le html dans Selenium IDE et tout fonctionnait bien, mais quand je transférais le code sur Visual Studio, l'erreur apparaissait 'could not locate element'. Cependant, j'ai maintenant résolu ce problème avec cssselector. Mon code est nxt_page = browser.find_element_by_css_selector ("input.btn") nxt_page.click() - ceci fonctionne pour trouver le bouton. Merci de votre aide. – user8784011