【问题标题】:Python - BeautifulSoup wont scrape the rest of the li in the ulPython - BeautifulSoup 不会刮掉 ul 中的其余 li
【发布时间】:2021-09-26 18:54:50
【问题描述】:

我希望从以英语存储日期和考试文件的考试网站上抓取信息。 Link provided here

对于那些不想检查自己的人,这是相关的html:

<ul class="sub-terms">
<li class="single-sub-term">
<div class="single-sub-term-heading">
<h3>מועד א׳ - 26/05/2021</h3>
<p class="single-sub-term-description"></p></div>
    <ul class="pdf-list">
    <li class="pdf-item">
    <div class="pdf-info">
        <p><span class="first-line">16481</span></p>

问题:在 ul 'sub-terms' - “single-sub-terms” 中有 3 li's - 其中存储了考试名称和日期。我需要访问所有 3 个 li,但我的代码当前在第一个 li 上输出并停止。

代码:

from bs4 import BeautifulSoup
import requests

html_text = requests.get('https://www.geva.co.il/solution_term/english_2021_summer/').text
soup = BeautifulSoup(html_text, 'lxml')


entirePage = soup.find('ul', class_ = 'sub-terms')
lists = entirePage.find_all('li', class_ ='single-sub-term')
for list in lists:
    date = list.find('h3').text
    pdf_info = list.find('span', class_='first-line').text

    print(f'''Welcome! 
    Current date - {date}        Term Number : {pdf_info} ''')
    print('')

输出:

    Welcome! 
    Current date - מועד א׳ - 26/05/2021        Term Number : 16481 

Welcome! 
    Current date -  - 27/05/2021        Term Number : 16382 

Welcome! 
    Current date - מועד ב' - 05/07/2021        Term Number : 16381 - A 

【问题讨论】:

  • 您想从关联的 li 标签中提取所有术语编号对吗??

标签: python html web web-scraping beautifulsoup


【解决方案1】:
import requests
from bs4 import BeautifulSoup


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    for x in soup.select('.single-sub-term-heading'):
        print(x.text)
        for i in x.next_sibling.select('.pdf-item'):
            print(i.select_one('span').text)
            print([a['href']
                  for a in i.select_one('.pdf-download').select('a')])


main('https://www.geva.co.il/solution_term/english_2021_summer/')

输出:

מועד א׳ - 26/05/2021
16481
['https://files.geva.co.il/geva_website/uploads/2021/05/E16481.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-E.pdf']
16381
['https://files.geva.co.il/geva_website/uploads/2021/05/A16381-2.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-A-1.pdf']
 - 27/05/2021
16382
['https://files.geva.co.il/geva_website/uploads/2021/05/16382-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-C.pdf']
16384
['https://files.geva.co.il/geva_website/uploads/2021/05/16384-B.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-B.pdf']
16484
['https://files.geva.co.il/geva_website/uploads/2021/05/16484-D.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-D.pdf']
16582
['https://files.geva.co.il/geva_website/uploads/2021/05/16582-G-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-G-1.pdf']
16584
['https://files.geva.co.il/geva_website/uploads/2021/05/16584-F.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-F.pdf']
מועד ב' - 05/07/2021
16381 - A
['https://files.geva.co.il/geva_website/uploads/2021/05/16381.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16381-פתרון.pdf']
16384 - B
['https://files.geva.co.il/geva_website/uploads/2021/05/16384.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16384-פתרון.pdf']
16382 - C
['https://files.geva.co.il/geva_website/uploads/2021/05/16382-1-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16382-פתרון.pdf']
16484 - D
['https://files.geva.co.il/geva_website/uploads/2021/05/16484.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16484-פתרון.pdf']
16481 - E
['https://files.geva.co.il/geva_website/uploads/2021/05/16481.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16481-פתרון.pdf']
16584 - F
['https://files.geva.co.il/geva_website/uploads/2021/05/16584.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16584פתרון.pdf']
16582 - G
['https://files.geva.co.il/geva_website/uploads/2021/05/16582-3.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16582-פתרון.pdf']
(MyEnv) Lab> C:\Users\AmericaN\Desktop\Lab\MyEnv\Scripts\python.exe -u "c:\Users\AmericaN\Desktop\Lab\stack.py"
מועד א׳ - 26/05/2021
16481
['https://files.geva.co.il/geva_website/uploads/2021/05/E16481.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-E.pdf']    
16381
['https://files.geva.co.il/geva_website/uploads/2021/05/A16381-2.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-A-1.pdf']
 - 27/05/2021
16382
['https://files.geva.co.il/geva_website/uploads/2021/05/16382-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-C.pdf']   
16384
['https://files.geva.co.il/geva_website/uploads/2021/05/16384-B.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-B.pdf']   
16484
['https://files.geva.co.il/geva_website/uploads/2021/05/16484-D.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-D.pdf']   
16582
['https://files.geva.co.il/geva_website/uploads/2021/05/16582-G-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-G-1.pdf']
16584
['https://files.geva.co.il/geva_website/uploads/2021/05/16584-F.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-F.pdf']
מועד ב' - 05/07/2021
16381 - A
['https://files.geva.co.il/geva_website/uploads/2021/05/16381.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16381-פתרון.pdf']
16384 - B
['https://files.geva.co.il/geva_website/uploads/2021/05/16384.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16384-פתרון.pdf']
16382 - C
['https://files.geva.co.il/geva_website/uploads/2021/05/16382-1-1.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16382-פתרון.pdf']
16484 - D
['https://files.geva.co.il/geva_website/uploads/2021/05/16484.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16484-פתרון.pdf']
16481 - E
['https://files.geva.co.il/geva_website/uploads/2021/05/16481.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16481-פתרון.pdf']
16584 - F
['https://files.geva.co.il/geva_website/uploads/2021/05/16584.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16584פתרון.pdf']
16582 - G
['https://files.geva.co.il/geva_website/uploads/2021/05/16582-3.pdf', 'https://files.geva.co.il/geva_website/uploads/2021/05/16582-פתרון.pdf']

【讨论】:

    【解决方案2】:

    此示例将从页面创建 pandas DataFrame:

    import requests
    import pandas as pd
    from bs4 import BeautifulSoup
    
    
    url = "https://www.geva.co.il/solution_term/english_2021_summer/"
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    
    all_data = []
    for pdf_item in soup.select("li.pdf-item"):
        h3 = pdf_item.find_previous("h3").text
        number = pdf_item.select_one(".first-line").text
        for a in pdf_item.select("a.black-btn"):
            all_data.append(
                {
                    "title": h3,
                    "number": number,
                    "link_text": a.text,
                    "link": a["href"],
                }
            )
    
    df = pd.DataFrame(all_data)
    print(df)
    

    打印:

                       title     number       link_text                                                                   link
    0   מועד א׳ - 26/05/2021      16481    צפייה בשאלון       https://files.geva.co.il/geva_website/uploads/2021/05/E16481.pdf
    1   מועד א׳ - 26/05/2021      16481  צפייה בפתרונות      https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-E.pdf
    2   מועד א׳ - 26/05/2021      16381    צפייה בשאלון     https://files.geva.co.il/geva_website/uploads/2021/05/A16381-2.pdf
    3   מועד א׳ - 26/05/2021      16381  צפייה בפתרונות    https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-A-1.pdf
    4           - 27/05/2021      16382    צפייה בשאלון      https://files.geva.co.il/geva_website/uploads/2021/05/16382-1.pdf
    5           - 27/05/2021      16382  צפייה בפתרונות      https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-C.pdf
    6           - 27/05/2021      16384    צפייה בשאלון      https://files.geva.co.il/geva_website/uploads/2021/05/16384-B.pdf
    7           - 27/05/2021      16384  צפייה בפתרונות      https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-B.pdf
    8           - 27/05/2021      16484    צפייה בשאלון      https://files.geva.co.il/geva_website/uploads/2021/05/16484-D.pdf
    9           - 27/05/2021      16484  צפייה בפתרונות      https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-D.pdf
    10          - 27/05/2021      16582    צפייה בשאלון    https://files.geva.co.il/geva_website/uploads/2021/05/16582-G-1.pdf
    11          - 27/05/2021      16582  צפייה בפתרונות    https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-G-1.pdf
    12          - 27/05/2021      16584    צפייה בשאלון      https://files.geva.co.il/geva_website/uploads/2021/05/16584-F.pdf
    13          - 27/05/2021      16584  צפייה בפתרונות      https://files.geva.co.il/geva_website/uploads/2021/05/פתרון-F.pdf
    14  מועד ב' - 05/07/2021  16381 - A    צפייה בשאלון        https://files.geva.co.il/geva_website/uploads/2021/05/16381.pdf
    15  מועד ב' - 05/07/2021  16381 - A  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16381-פתרון.pdf
    16  מועד ב' - 05/07/2021  16384 - B    צפייה בשאלון        https://files.geva.co.il/geva_website/uploads/2021/05/16384.pdf
    17  מועד ב' - 05/07/2021  16384 - B  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16384-פתרון.pdf
    18  מועד ב' - 05/07/2021  16382 - C    צפייה בשאלון    https://files.geva.co.il/geva_website/uploads/2021/05/16382-1-1.pdf
    19  מועד ב' - 05/07/2021  16382 - C  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16382-פתרון.pdf
    20  מועד ב' - 05/07/2021  16484 - D    צפייה בשאלון        https://files.geva.co.il/geva_website/uploads/2021/05/16484.pdf
    21  מועד ב' - 05/07/2021  16484 - D  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16484-פתרון.pdf
    22  מועד ב' - 05/07/2021  16481 - E    צפייה בשאלון        https://files.geva.co.il/geva_website/uploads/2021/05/16481.pdf
    23  מועד ב' - 05/07/2021  16481 - E  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16481-פתרון.pdf
    24  מועד ב' - 05/07/2021  16584 - F    צפייה בשאלון        https://files.geva.co.il/geva_website/uploads/2021/05/16584.pdf
    25  מועד ב' - 05/07/2021  16584 - F  צפייה בפתרונות   https://files.geva.co.il/geva_website/uploads/2021/05/16584פתרון.pdf
    26  מועד ב' - 05/07/2021  16582 - G    צפייה בשאלון      https://files.geva.co.il/geva_website/uploads/2021/05/16582-3.pdf
    27  מועד ב' - 05/07/2021  16582 - G  צפייה בפתרונות  https://files.geva.co.il/geva_website/uploads/2021/05/16582-פתרון.pdf
    

    【讨论】:

    • 创建此列表后,我希望创建两个进一步的功能: 1. 下载与每个测试相关的 pdf。 2. 将提取的所有信息导出到excel表格中是否可以使用pandas实现?或者您会推荐哪些其他库?
    • @ThomasReiner 您可以将数据帧保存到.csv.xls,例如使用df.to_csv("data.csv", index=None) 命令。要保存 PDF,您也可以使用 requests 模块。
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2021-10-16
    • 2022-01-14
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2018-03-25
    相关资源
    最近更新 更多