当前位置: 首页 > 知识库问答 >
问题:

Python Web刮板-尝试让程序在一个特定位置刮数据,而不是整个页面

扶誉
2023-03-14

我已经浏览了网络,阅读和观看了几个关于如何解决我的问题的在线指南,但我被卡住了,希望得到一些投入。我正在尝试建立一个网站刮刮器,将从路透社的并购交易部分刮刮,并成功地编写了一个程序,可以刮刮标题,摘要,日期,和文章的链接。然而,我试图解决的问题是,我希望程序只从标题/文章中刮取摘要,这些标题/文章位于合并和收购栏的正下方。当前的程序正在刮取它看到的所有标记为“文章”和属性/类为“故事”的标题,因此,不仅刮取合并和收购栏目的标题,而且刮取市场新闻栏目的标题。

当bot开始从市场新闻栏中抓取标题时,我不断地得到属性错误,因为市场新闻栏没有任何摘要,因此没有文本可拉,导致我的代码终止。我试图用try/except逻辑路径来解决这个问题,认为它不会从市场新闻栏中拉出头条,但是代码一直拉出头条。

我试着写了一段新的代码,告诉程序不是寻找所有带有文章的标签,而是寻找所有带有文章的标签,我认为如果我给bot一个更直接的路径,它就会从自上而下的方法中抓取文章。然而,这失败了,现在我的头只是痛。提前谢谢大家!

下面是我的代码:

from bs4 import BeautifulSoup
import requests

website = 'https://www.reuters.com/finance/deals/mergers'
source = requests.get(website).text
soup = BeautifulSoup(source, 'lxml')

for article in soup.find_all('article'):
    headline = article.div.a.h3.text.strip()
    #threw in strip() to fix the issue of a bunch of space being printed before the headline title.
    print(headline+ "\n")

    date = article.find("span",class_ = 'timestamp').text
    print(date)

    try: #Put in Try/Except logic to keep the code going
        summary = article.find("div", class_="story-content").p.text
        print(summary + "\n")
        link = article.find('div', class_='story-content').a['href']
        #this bit [href] is the syntax needed for me to pull out the URL from the html code
        origin = "https://www.reuters.com/finance/deals/mergers"
        print(origin + link + "\n")
    except Exception as e:
        summary = None
        link = None

    #This section here is another part I'm working on to get the scraper to go to
    #the next page and continue scraping for headlines, dates, summaries, and links
    next_page = soup.find('a', class_='control-nav-next')["href"]
    source = requests.get(website + next_page).text
    soup = BeautifulSoup(source, 'lxml')

共有1个答案

诸葛康胜
2023-03-14

仅更改此行:

for article in soup.select('div[class="column1 col col-10"] article'):

使用此语法,.select()查找 下面的所有article标记,它包含您感兴趣的头,而不是其他头。

这里是文档:https://www.crummy.com/software/Beautifulsoup/bs4/doc/index.html?highlight=selectcss-selectors

 类似资料:
  • 我试图使用Selenium从代码中获得jpg。我已经设法找到了链接点击获得我的jpg所在的位置。(真倒霉!我刚接触硒)。所有的窗户都随着它的点击而打开。与刮刮乐相比,它真的很慢,所以如果有人能告诉我一个更快的方法,那就太好了。 我试图搜索的网站是www.rosegal.com。我正在刮的类别是大尺寸的背心。这第一页有60个产品在它。如果单击这些产品,它会将您带到一个产品页面,在该页面上您可以选择所

  • ***我的代码只用于练习! 我试图从FPL的网站上删除每个玩家的名字和团队https://www.premierleague.com/我的代码有一些问题。 问题是它只得到的页面与'-1'在网址的末尾,whch我甚至没有灌输在我的页面列表! 页面没有任何逻辑-基本url是https://www.premierleague.com/players?se=363 我的代码:

  • 我试着在香港列出所有餐馆和他们的相应网址。目前,在我下面的代码中,我能够刮取第一页和第二页。但我希望底部的for循环更具动态性,并不断刮取,直到达到我在range()中指定的条目数量。 我在这方面还是个新手,所以任何帮助都会很棒。

  • 我正在尝试从此网页的一个表中提取表数据。但是,当我尝试从每个表行提取表数据时,似乎无法从每一行获取数据。我检测到的一种模式是,我无法看到存在图像的行的表数据。有没有其他的方法,我仍然可以刮我想要的数据(职位,家乡,职级等),特别是当涉及到那些图片存在的时候? 我已经能够使用“div”类获得播放器名称,但我不认为我能够将它用于其他列中的数据。

  • 使用MediaQuery类及其数据属性,我想为整个应用程序设置textScaleFactor,但是我不能在MaterialApp之前获得上下文。

  • 最近,我一直试图从一个网站上获取大量的定价,从一个页面开始,每个项目的页面都链接到起始页面。我希望运行一个脚本,允许我单击某个项目的框,删除该项目的定价和描述,然后返回起始页并继续该循环。然而,有一个明显的问题,我在刮掉第一件物品后遇到了。返回起始页后,容器没有定义,因此出现了一个陈旧的元素错误,该错误会中断循环并阻止我获取其余的项。这是我使用的示例代码,希望能够一个接一个地刮去所有项目。 然而,