抓取下一页内容beautifulsoup

时间:2020-11-09 19:18:36

标签: python web-scraping beautifulsoup

因此,我正在尝试抓取this新闻网站。我可以从每个主题中抓取新闻报道。但有时,文章页面在其中包含多个页面,例如this。下一页具有与首页相同的HTML结构。如果其中有多个页面,是否可以自动刮除下一页上的其余文章?

这是我的代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv

detik = requests.get('https://www.detik.com/terpopuler')
beautify = BeautifulSoup(detik.content, 'html5lib')

news = beautify.find_all('article', {'class','list-content__item'})
arti = []
for each in news:
  try:
    title = each.find('h3', {'class','media__title'}).text
    lnk = each.a.get('href')

    r = requests.get(lnk)
    soup = BeautifulSoup(r.text, 'html5lib')
    content = soup.find('div', {'class', 'detail__body-text itp_bodycontent'}).text.strip()

    print(title)
    print(lnk)

    arti.append({
      'Headline': title,
      'Content':content,
      'Link': lnk
    })
  except:
    continue
df = pd.DataFrame(arti)
df.to_csv('detik.csv', index=False)

这是下一页按钮图像。 “ Selanjutnya”表示下一个,“ Halaman”表示页面。

enter image description here

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您将要使用的方法是,首先编写一个单独的函数从文章页面提取信息,然后通过检查此类“ detail__anchor-numb”来检查文章页面上是否有分页,然后遍历页面 并从文章中提取数据:

pages= soup.select('.detail__anchor-numb')
if len(pages):
    page_links= [i.attrs.get('href') for i in soup.select('.detail__anchor-numb')]
    for page in range(1, len(page_links)+1):
        #scrape_article function will handle requesting a url and getting data from article
        next_article_url = page_links[page ]
        scrape_article(next_article_url)

我希望能回答您的问题