2016-07-14 2 views
-2

Я пытаюсь написать скребок, чтобы получить результаты на следующей странице:Как я могу сделать веб-скребок пересекаю несколько страниц результатов поиска с помощью Beautiful Soup?

https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1

Я пытаюсь получить все результаты, а не только результаты «А», но я полагал, что я мог бы начать с одной буквы а затем пробежать весь алфавит. Если кто-то может помочь с этой частью, это тоже будет здорово.

В любом случае, я хочу, чтобы все ноты Party, то есть элементы с классом property party-name.

У меня есть следующий код:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1") 
bsObj = BeautifulSoup(html) 
nameList = bsObj.findAll("td", {"class":"party-name"}) 
for name in nameList: 
print(name.get_text()) 

Однако, это работает только для одной страницы. Результаты охватывают несколько страниц. Как это сделать для нескольких страниц?

Также, если вы можете помочь получить все результаты, а не только A, это было бы здорово.

EDIT Я улучшил свой код сейчас и могу выполнить все поисковые запросы. Тем не менее, я до сих пор не могу перейти на следующую страницу. Я попытался использовать page_number ++, но не знает, где остановиться, поскольку количество результатов страницы меняется. Как я могу перейти на следующую страницу на последней странице ???

Новый код:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 

all_letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o","p","q","r","s","t","u","v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] 
for letter in all_letters: 

    page_number = 1 
    url = "https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253d" + letter + "&page=" + str (page_number) 
    html = urlopen(url) 
    bsObj = BeautifulSoup(html) 
    nameList = bsObj.findAll("td", {"class":"party-name"}) 

    for name in nameList: 
     print(name.get_text()) 
+0

Вы можете попробовать использовать генераторы – Quill

+4

Plase ** не переставлять вопросы **: [Как повторять несколько страниц результатов при веб-очищении с помощью Beautiful Soup] (http : //stackoverflow.com/questions/38407661/how-to-iterate-through-multiple-results-pages-when-web-scraping-with-beautiful-s) –

ответ

-1

я бы решить это так (псевдокод)

for letter in all_letters: 
    page = 1 
    while True: 
     url = letter + page 
     # scrape the page 
     # check with bs if there is an a-element with id "NextLink1" 
     if not link_to_next_page_found: 
      break 
     page += 1 
+0

Я обновил свой код (см. обновленный код выше) , Теперь я строю свой url, как вы сказали, и я могу создать список всех возможных начал поиска. Итак, у меня есть все поисковые запросы. Однако я не могу решить следующую часть страницы. Я переработал с page_number ++, но доходит до бесконечности и не останавливается. Как я могу ограничить его действительными для каждого результата поиска? –

0

Из того, что я понимаю, что вы хотите изменить параметр «starts_with» на странице анс перебрать все алфавитов. Если мое понимание вопроса верное, это может быть полезно.

Если вы проанализируете URL-адрес, вы получите ответ.

URL = "https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1"

письмо после того, как "% 253d" диктует "starts_with" термин. В настоящее время это «а», следовательно, он возвращается с начинается с «A», если вы хотите перебрать просто изменить URL

url = 'https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253d' + starts_with + '&page=1'

starts_with может быть что угодно, либо символ (а, Ь, с, ...) или строка (abc, asde, ...)

+0

Я обновил свой код (см. Обновленный код выше). Теперь я строю свой url, как вы сказали, и я могу создать список всех возможных начал поиска. Итак, у меня есть все поисковые запросы.Однако я не могу решить следующую часть страницы. Я переработал с page_number ++, но доходит до бесконечности и не останавливается. Как я могу ограничить его действительными для каждого результата поиска? –

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