【问题标题】:how to add a loop to Python script that scrapes a website如何向抓取网站的 Python 脚本添加循环
【发布时间】:2020-04-05 11:59:00
【问题描述】:

我有一个抓取网站的脚本。但是,我正在寻找它来逐步抓取网站的范围。所以想象范围设置为 0-999。代码是:

import requests
from bs4 import BeautifulSoup

URL = 'https://www.greekrank.com/uni/1/sororities/'
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')

uni = soup.find_all('h1', class_='overviewhead')
for title in uni:
    print(title.text)

rows = soup.find_all('div', class_='desktop-view')
for row in rows:
    print(row.text)

它会去https://www.greekrank.com/uni/1/sororities/刮那个,然后去https://www.greekrank.com/uni/2/sororities/刮那个,等等。

【问题讨论】:

  • 好吧,写一个for循环?你已经写了两个,所以你应该知道怎么做。

标签: python web-scraping


【解决方案1】:

将其全部包装在一个循环中。还要注意 URL 分配。

import requests
from bs4 import BeautifulSoup

for x in range(0, 999):
    URL = f'https://www.greekrank.com/uni/{x}/sororities/'
    page = requests.get(URL)

    soup = BeautifulSoup(page.content, 'html.parser')

    uni = soup.find_all('h1', class_='overviewhead')
    for title in uni:
        print(title.text)

    rows = soup.find_all('div', class_='desktop-view')
    for row in rows:
        print(row.text)

【讨论】:

  • 另外,请注意在每次迭代后添加一些延迟,以免服务器因请求而过载!
  • 当我在 IDLE 中运行它时,它似乎没有显示任何东西。你知道这会被抓到哪里吗?如果该网站不存在(例如“12”),它会绕过它并继续运行,还是永远坚持下去?
  • 我尝试了以下方法但没有奏效:从时间导入睡眠从 bs4 导入 BeautifulSoup for x in range(0, 10): try: URL = f'greekrank.com/uni{x} /sororities/' page = requests.get(URL) soup = BeautifulSoup(page.content, 'html.parser') uni = soup.find_all('h1', class_='overviewhead') for uni 中的标题: print(title .text) rows = soup.find_all('div', class_='desktop-view') for row in rows: print(row.text) time.sleep(1) except: pass
  • 您可以在请求之后添加对状态代码的检查。如果不是你所期望的(可能是 200 个),那么continue
猜你喜欢
  • 2013-12-05
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多