使用带有BeautifulSoup的For循环来选择不同URL上的文本

时间:2017-05-22 20:23:05

标签: python beautifulsoup

我一直在摸不着头脑,试图找到在一个网站上循环访问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的标题和说明的最佳方法是什么?在此先感谢您的帮助!

1 个答案:

答案 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个后续页面。

希望这有帮助。