ซุปแสนสวย - การเลือกคลาสให้ผลลัพธ์ที่ไม่คาดคิด

ฉันยังใหม่กับการเขียนโปรแกรมและกำลังเรียนรู้ Python ผ่านการขูดเว็บ สิ่งที่ฉันพยายามทำคือจับบรรทัดด้านล่างจากไซต์ที่แสดงอยู่ใน URL ของฉัน:

<a class="" href="https://www.adweek.com?paged=776%3Fs%3Dinterpublic&amp;orderby=date&amp;s=interpublic">776</a> แต่ดูเหมือนฉันไม่สามารถไปที่นั่นได้ มันจะส่งคืนข้อมูลการแบ่งหน้าบรรทัดแรกเท่านั้นและฉันไม่เข้าใจว่าทำไม ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก

import requests
from bs4 import BeautifulSoup
url = 'https://www.adweek.com/?s=interpublic&orderby=date'
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
k =soup.find_all('div', {'class':'pagination-centered'})

ส่งคืนเท่านั้น --

[<div class="pagination-centered"><ul class="pagination">
 <li><span aria-current="page" class="current">1</span></li></ul></div>]

ขอบคุณเซธ


person Seth Moskowitz    schedule 24.07.2020    source แหล่งที่มา
comment
กรุณาโพสต์ผลลัพธ์ที่คุณต้องการ?   -  person Umair Mubeen    schedule 24.07.2020
comment
คุณกำลังรอให้หน้าเว็บโหลดเสร็จก่อนที่จะทำการสืบค้นหรือไม่? div นั้นอาจจะเต็มไปด้วยจาวาสคริปต์ในภายหลัง   -  person shrewmouse    schedule 24.07.2020
comment
ขอบคุณสำหรับการตอบรับ ฉันต้องการไปที่หมายเลข 776 ที่อยู่ในโค้ดบิตแรก แต่ควรรวมตัวเลขทั้งหมดไว้ในส่วนการแบ่งหน้า อย่างไรก็ตาม ดูเหมือนว่าฉันไม่สามารถรับอะไรได้มากกว่าส่วนแรกในพื้นที่การแบ่งหน้า ยกเว้นส่วนถัดไป ท้ายที่สุดฉันต้องการหมายเลข 776   -  person Seth Moskowitz    schedule 24.07.2020
comment
ฉันเห็นได้ในตัวแปร แต่ดูเหมือนจะไม่สามารถเข้าถึงได้   -  person Seth Moskowitz    schedule 24.07.2020
comment
คุณเห็นมันที่ไหน? ในผลลัพธ์ของซุปหรือโดยการตรวจสอบโค้ด HTML ในเบราว์เซอร์?   -  person shrewmouse    schedule 24.07.2020
comment
ฉันเห็นมันอยู่ในวัตถุซุปของฉัน   -  person Seth Moskowitz    schedule 24.07.2020


คำตอบ (1)


คุณสามารถรับการแบ่งหน้าได้โดยใช้ตัวเลือก a[href*="paged="] css:

import requests
from bs4 import BeautifulSoup

url = 'https://www.adweek.com/?s=interpublic&orderby=date'
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')

# print text and href
pagination = soup.select('a[href*="paged="]')
for p in pagination:
    print(p.text.strip(), p.get('href'))

ถัดไปมี URL เดียวกันกับลิงก์แรก คุณสามารถใช้ set เพื่อรับเฉพาะ href ที่ไม่ซ้ำเท่านั้น : :

pagination = {p['href'] for p in soup.select('a[href*="paged="]')}

คุณสามารถรับหมายเลขหน้าสุดท้ายและวนซ้ำโดยเปลี่ยนพารามิเตอร์ paged ใน URL จนถึงหน้าสุดท้าย

แหล่งที่มาของหน้าที่ไม่มี JavaScript: ป้อนคำอธิบายรูปภาพที่นี่

person Sers    schedule 24.07.2020
comment
ขอบคุณ! แม้ว่าฉันจะไม่เข้าใจว่าคุณทำอะไร แต่มันก็ได้ผลอย่างแน่นอน - person Seth Moskowitz; 24.07.2020