Web scraping 如何使用bs4从网站中刮取相同级别的元素
我正试图从以下网站上搜集这些书籍和作者的列表: 我首先使用以下方法创建一个汤对象: 汤=美汤(r.content,features='lxml') 然后我检查chrome上的特定元素,并通过以下方式过滤页面的特定部分: listicle=soup.find('div',class='content''article-body from content-api js-article') 现在,对于令人困惑的部分:Web scraping 如何使用bs4从网站中刮取相同级别的元素,web-scraping,beautifulsoup,Web Scraping,Beautifulsoup,我正试图从以下网站上搜集这些书籍和作者的列表: 我首先使用以下方法创建一个汤对象: 汤=美汤(r.content,features='lxml') 然后我检查chrome上的特定元素,并通过以下方式过滤页面的特定部分: listicle=soup.find('div',class='content''article-body from content-api js-article') 现在,对于令人困惑的部分: 该列表的索引、书名和作者姓名都位于同一级别(h2)。我可以通过查找('h2')获得
我对网页抓取是完全陌生的。如果这是一个非常愚蠢的问题,我深表歉意。一个解决方案是使用selectall
和zip()函数。例如:
import requests
from bs4 import BeautifulSoup
url = 'https://www.theguardian.com/books/2019/sep/21/best-books-of-the-21st-century'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
h2s = soup.select('.content__article-body h2')[::-1] # we want go in ascending fashion
for author, title, i in zip(h2s[::3], h2s[1::3], h2s[2::3]):
print('{:<5} {:<60} {}'.format(i.text, title.text, author.text))
一种解决方案是使用selectall
并使用zip()
函数。例如:
import requests
from bs4 import BeautifulSoup
url = 'https://www.theguardian.com/books/2019/sep/21/best-books-of-the-21st-century'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
h2s = soup.select('.content__article-body h2')[::-1] # we want go in ascending fashion
for author, title, i in zip(h2s[::3], h2s[1::3], h2s[2::3]):
print('{:<5} {:<60} {}'.format(i.text, title.text, author.text))
非常感谢你。这很有帮助,非常感谢。这有帮助。