首页 > 解决方案 > Python bs4:如果满足特定条件,如何使用不同的抓取页面重复“For”循环?

问题描述

我正在尝试创建一个for循环,一旦它到达search_result抓取页面中的最后一个属性,它将重复循环,但使用新抓取网页的数据。

循环到达最后一个属性后for,它将在网页上查找链接,并使用新抓取的网页重复循环。

我已经编写了下面的代码,但循环不会重复它从原始网页的链接获得的新抓取页面。

import requests
from bs4 import BeautifulSoup

page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page, 'lxml')

for search_result in soup.find_all(attrs={"search-result-index":True}):
    print(search_result.name.text)

    # if last search result, get link to new web page and repeat loop for the new web page.
    if search_result == soup.find_all(attrs={"search-result-index":True})[-1]:
        page = requests.get(soup.select_one('li.a-last [href]')['href'], headers=headers)
        soup = BeautifulSoup(page, 'lxml') 

你有什么想法吗?

标签: pythonweb-scrapingbeautifulsoup

解决方案


像这样的东西??

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}


def func_go(URL):
    page = requests.get(URL, headers=headers)
    soup = BeautifulSoup(page, 'lxml')
    for search_result in soup.find_all(attrs={"search-result-index":True}):
        print(search_result.name.text)

        if search_result == soup.find_all(attrs={"search-result-index":True})[-1]:
            URL = soup.select_one('li.a-last [href]')['href']
            func_go(URL)




func_go('www.example.com')

推荐阅读