用Python和beauthoulsoup解析多个url

2024-10-03 06:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天开始学习Python,因此我正在努力学习一些基础知识并不奇怪。我试图从一个项目的学校网站解析数据,我设法解析了第一页。但是,有多个页面(结果分页)。在

我有一个关于如何进行的想法,即,在一个循环中运行的网址,因为我知道网址格式,但我不知道如何继续。我想最好是搜索“下一步”按钮,如果有,运行函数,如果没有,就停止函数。在

如果能得到任何帮助,我将不胜感激。在

import requests
from  bs4 import BeautifulSoup

url = "http://www.myschoolwebsite.com/1" 
#url2 = "http://www.myschoolwebsite.com/2"
r = requests.get(url)

soup = BeautifulSoup(r.content,'lxml')
g_data = soup.find_all('ul', {"class": "searchResults"})

for item in g_data:
    for li in item.findAll('li'):
        for resultnameh2 in li.findAll('h2'):
            for resultname in resultnameh2.findAll('a'):
                print(resultname).text
    for resultAddress in li.findAll('p', {"class": "resultAddress"}):
        print(resultAddress).text.replace('Get directions','').strip()   
    for resultContact in li.findAll('ul', {"class": "resultContact"}):
        for resultContact in li.findAll('a', {"class": "resultMainNumber"}):
            print(resultContact).text

Tags: 函数textinimporturlforlirequests
2条回答

我会创建一个包含所有url的数组并循环使用它,或者如果有一个清晰的模式,那么编写一个regex来搜索该模式。在

首先,可以假设目录的最大页数(如果知道url的模式)。我假设url是http://base_url/page下一步你可以写下:

base_url = 'http://www.myschoolwebsite.com'
total_pages = 100

def parse_content(r):
    soup = BeautifulSoup(r.content,'lxml')
    g_data = soup.find_all('ul', {"class": "searchResults"})

    for item in g_data:
        for li in item.findAll('li'):
            for resultnameh2 in li.findAll('h2'):
                for resultname in resultnameh2.findAll('a'):
                    print(resultname).text
        for resultAddress in li.findAll('p', {"class": "resultAddress"}):
            print(resultAddress).text.replace('Get directions','').strip()   
        for resultContact in li.findAll('ul', {"class": "resultContact"}):
            for resultContact in li.findAll('a', {"class": "resultMainNumber"}):
                print(resultContact).text

for page in range(1, total_pages):
    response = requests.get(base_url + '/' + str(page))
    if response.status_code != 200:
        break

    parse_content(response)

相关问题 更多 >