因此,我正在尝试抓取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”表示页面。
非常感谢您的帮助。
答案 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)
我希望能回答您的问题