簡體   English   中英

Python - 使用 BeautifulSoup 遍歷頁面

[英]Python - Iterate through pages with BeautifulSoup

我使用 BeautifulSoup4 從幾個網頁中抓取數據。 比如下面這個例子,url是https://wadsfred.aliexpress.com/store/425826/search/1.html ,有96頁。 我的問題是腳本在幾頁后拋出一個錯誤。 通常,當代碼到達第 15-20 頁時。 錯誤信息:

回溯(最近一次調用):文件“main.py”,第 34 行,在 if next_page.text != 'Next': AttributeError: 'NoneType' object has no attribute 'text'

我在這里先向您的幫助表示感謝!

import requests
import os
import csv
from itertools import count
from bs4 import BeautifulSoup

os.chdir('C:\MyFolder')
page_nr = 1
price = []
min_order = []
prod_name = []

for page_number in count(start = 1):
    url = 
'https://wadsfred.aliexpress.com/store/425826/search/{}'.format(page_nr) + 
'.html'
    print(url)
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    for div_b in soup.find_all('div', {'class':'cost'}):
        price.append(div_b.text)

    for min_or in soup.find_all('span', {'class':'min-order'}):
        min_order.append(min_or.text)

    for pr_name in soup.find_all('div', {'class':'detail'}):
        for pr_h in pr_name.find_all('h3'):
            for pr_title in pr_h.find_all('a'):
                prod_name_s = (pr_title.get('title').strip())
                prod_name.append(prod_name_s[:120])

    print(len(prod_name))
    page_nr = page_nr + 1
    next_page = soup.find('a', {'class':'ui-pagination-next'})
    if next_page.text != 'Next':
      break

它重定向到登錄頁面,將用戶代理添加到您的請求中

heads = {"User-Agent" : 'Mozilla/5.0......'}
for page_number in count(start = 1):
    .....
    response = requests.get(url, headers=heads)

甚至更好地使用requests.session()來創建持久會話(cookies)

某些頁面中可能不存在具有“ui-pagination-next”類的“a”標簽。 當您已經知道總共有 96 頁時,您可以跳過該檢查。 並將抓取塊放在 try catch 中以跳過某些頁面中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM