我一直在摸不着头脑,试图找到在一个网站上循环访问URL表的最佳方法,请求URL并从第二个站点的2个不同区域抓取文本。
我尝试多次重写此脚本,使用几种不同的解决方案来实现我想要的结果,但是,我还没有完全实现这一点。
目前,我可以在第一页上选择表格的第一个链接,转到新页面并选择我需要的数据,但是我无法让代码继续遍历第一页上的每个链接。
import requests
from bs4 import BeautifulSoup
journal_site = "https://journals.sagepub.com"
site_link 'http://journals.sagepub.com/action/showPublications?
pageSize=100&startPage='
# each page contains 100 results I need to scrape from
page_1 = '0'
page_2 = '1'
page_3 = '3'
page_4 = '4'
journal_list = site_link + page_1
r = requests.get(journal_list)
soup = BeautifulSoup(r.text, 'html.parser')
for table_row in soup.select('div.results'):
journal_name = table_row.findAll('tr', class_='False')
journal_link = table_row.find('a')['href']
journal_page = journal_site + journal_link
r = requests.get(journal_page)
soup = BeautifulSoup(r.text, 'html.parser')
for journal_header, journal_description in zip(soup.select('main'),
soup.select('div.journalCarouselTextText')):
try:
title = journal_header.h1.text.strip()
description = journal_description.p.text.strip()
print(title,':', description)
except AttributeError:
continue
查找每个journal_name的标题和说明的最佳方法是什么?在此先感谢您的帮助!
答案 0 :(得分:0)
你的大部分代码都适用于我,只需修改代码的中间部分,将部分保留在相同的前后:
# all code same up to here
journal_list = site_link + page_1
r = requests.get(journal_list)
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find("div", { "class" : "results" })
table = results.find('table')
for row in table.find_all('a', href=True):
journal_link = row['href']
journal_page = journal_site + journal_link
# from here same as your code
我从第一页获得了100个结果的第四个回复(标题/描述)后停止了。我很确定它会得到所有预期的结果,只需要遍历4个后续页面。
希望这有帮助。