寻求帮助循环浏览网页

时间:2019-10-28 23:36:16

标签: python web-scraping beautifulsoup

我有一个网络刮板,可刮刮一页评论,但似乎无法使刮板进入第二个网页,因此最多刮刮10页。

我尝试使用发现以下可识别属性的以下类进行for循环:class =“ BVRRSelectedPageNumber”:i 然后我与i + 1循环

但是我似乎无法获得正确的代码。

我很想获得关于我应该从此代码开头的提示或建议,谢谢。

import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen as uReq
import pandas as pd
import csv

def webScraper():
    for page in range(10):
        url = "https://www.marriott.com/hotels/hotel-reviews/amsnt-amsterdam-marriott-hotel"
        page = requests.get(url)
        soup = BeautifulSoup(page.content, 'html.parser')

        general_data = soup.find_all(class_='bvseo-review')
        i = 1
        first = general_data[i]
        i+=1

        span = []
        description = []
        rating = []
        auteur = []


        for item in general_data:
            span.append(item.find_all('span'))
            description.append(item.find_all('span', attrs={'itemprop':'description'}))
            rating.append(item.find_all('span', attrs={'itemprop':'ratingValue'}))
            auteur.append(item.find_all('span', attrs={'itemprop':'author'}))

        pagereviews = pd.DataFrame({
            "description":description,
            "ratingValue":rating,
            "author":auteur
        })
    return pagereviews
webScraper()

预期结果将是刮取10页评论。

1 个答案:

答案 0 :(得分:0)

我不完全理解您的问题。但是乍一看,有很多事情看起来很麻烦:

  1. 首先,我们遇到的问题是,您将名称page用作循环变量,但还在循环内为其分配了一个值。这是不好的编码,并导致意外的行为。

  2. 第二个明显的问题是循环的每次迭代中请求url都相同。这导致每次迭代都相同,这很可能是问题的一个根源。

  3. 以下构造无用:

i = 1
first = general_data[i]
i+=1

由于这是在for循环中发生的,所以最后一行永远不会有任何效果,并且{{1}的每次迭代中,i的值将在1中计算为first = general_data[i] }}-环。您为什么不只写for? (很可能您实际上可能想要first = general_data[1]!)

  1. 最后一次返回的值first = general_data[0]在循环的每次迭代中都会被覆盖。这也使整个for循环无效,因为将仅返回最后一次迭代的值。您可能想看看熊猫pagereviews方法;-)