Возникла проблема с удалением веб-страниц с bs4 в python - PullRequest
0 голосов
/ 29 мая 2020

Моя программа каждый раз возвращает разные числа. Если я запускаю каждую страницу отдельно, результат будет правильным. Я хотел получить все ссылки, набравшие 3 и более голосов.

from bs4 import BeautifulSoup as bs
import requests
import pandas
pg = 1
url ="https://stackoverflow.com/search?page="+str(pg)+"&tab=Relevance&q=scrappy%20python"
src = requests.get(url).text
soup = bs(src,'html.parser')
pages = soup.findAll('a',{'class' : 's-pagination--item js-pagination-item'})
number_of_pages = len(pages)
print(number_of_pages)
qualified=[]


while pg<=number_of_pages:
    print("In Page :"+str(pg))
    url = "https://stackoverflow.com/search?page=" + str(pg) + "&tab=Relevance&q=scrappy%20python"
    src = requests.get(url).text
    soup = bs(src, 'html.parser')
    a_links = soup.findAll('a',{'class':'question-hyperlink'})
    span_links = soup.findAll('span',{'class':'vote-count-post'})
    hrefs = []
    for a_link in a_links:
        hrefs.append(a_link.get('href'))
    for link in range(len(span_links)):
        vote = span_links[link].strong.text
        n = int(vote)
        if n>2:
            the_link = 'https://stackoverflow.com' + hrefs[link]
            qualified.append(the_link)
            print(len(qualified))

    pg +=1

1 Ответ

0 голосов

print(len(qualified)) покажет длину полного списка вашей ошибки. Вы можете получить количество ссылок в каждой, добавив i = 0 после while pg<=number_of_pages: и i += 1 после if n>2:, а затем добавив print(i) до или после pg +=1. Тогда код будет таким:

from bs4 import BeautifulSoup as bs
import requests
import pandas
pg = 1
url ="https://stackoverflow.com/search?page="+str(pg)+"&tab=Relevance&q=scrappy%20python"
src = requests.get(url).text
soup = bs(src,'html.parser')
pages = soup.findAll('a',{'class' : 's-pagination--item js-pagination-item'})
number_of_pages = len(pages)
print(number_of_pages)
qualified=[]


while pg<=number_of_pages:
    i = 0
    print("In Page :"+str(pg))
    url = "https://stackoverflow.com/search?page=" + str(pg) + "&tab=Relevance&q=scrappy%20python"
    src = requests.get(url).text
    soup = bs(src, 'html.parser')
    a_links = soup.findAll('a',{'class':'question-hyperlink'})
    span_links = soup.findAll('span',{'class':'vote-count-post'})
    hrefs = []
    for a_link in a_links:
        hrefs.append(a_link.get('href'))
    for link in range(len(span_links)):
        vote = span_links[link].strong.text
        n = int(vote)
        if n>2:
            i += 1
            the_link = 'https://stackoverflow.com' + hrefs[link]
            qualified.append(the_link)
    print(i)

    pg +=1
#print(qualified)

Вывод:

6
In Page :1
1
In Page :2
4
In Page :3
2
In Page :4
3
In Page :5
2
In Page :6
2
...