Это потому, что не все номера страниц отображаются на первой странице.
Скребок должен непрерывно получать данные текущей страницы и открывать следующую страницу до конца.
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import csv
# List to store Scraped Product Data.
URL = []
# Start page's url
pageUrl="https://www.flipkart.com/mobiles/samsung~brand/pr?count=40&p%5B%5D=sort%3Drecency_desc&page=1&sid=tyy%2F4io&viewType=list&wid=1.productCard.PMU_V2"
while True:
page = urlopen(pageUrl)
bsObj = BeautifulSoup(page, 'html.parser')
# Extraction of Product Data from URL.
for link in bsObj.findAll(class_="_1UoZlX"):
urlBuild = ("https://www.flipkart.com" + link.attrs['href'])
URL.append(urlBuild)
# Get Next page's url, if can't break loop
nxtLink=bsObj.find(class_="_2kUstJ", text="Next")
if nxtLink == None:
break
# Get next page's url
pageUrl = ("https://www.flipkart.com" + nxtLink.a.attrs['href'])
columnsTitles = ['Link']
test_df = pd.DataFrame({ 'Link': URL})
pd.set_option('display.max_colwidth',0)
print(test_df.info())
test_df
В этом случае test_df содержит 301 строку,
print(test_df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 301 entries, 0 to 300
Data columns (total 1 columns):
Link 301 non-null object
dtypes: object(1)
memory usage: 2.4+ KB
None