【问题标题】:Some help in scraping a page in python在 python 中抓取页面的一些帮助
【发布时间】:2020-08-29 04:43:09
【问题描述】:

我已经爬取了文章的描述。现在,我正在尝试 scrape 来自 BBC 新闻网站的视频描述,但它返回一个空字符串。有什么建议吗??!!

这是我的代码:

class BbcNewsSpider(CrawlSpider):
    name = 'BBCNews'
    start_urls = ['https://www.bbc.com/']
    rules=(Rule(LinkExtractor(restrict_xpaths="//li[contains(@class,'orb-nav-home')]//a",
                                                process_value=lambda x:x[0:16]+'com'), 
    callback='parse_home'),
       Rule(LinkExtractor(allow='bbc.com', 
       restrict_xpaths='//div[contains(@class,"module__content")]'
                                                           '//div[contains(@class,"media") and not 
       (contains(@class,"media--icon"))]'
                                                           '//a[contains(@class,"block-link__overlay-link")]'
                          , process_value=lambda x: 'https://www.bbc.com' + x if x[0:1] == "/" else x),
            callback='parse_item'),
       )

这是我正在使用的功能:

  def parse_home(self,response):
    if response.status==200:
        doc = pq(response.text)
        medias = doc('div.media--video').items()
        for media in medias:
            item=BbcmediaItem()
            item['url'] = media.find('a.media__link').attr('href')
            item['title']=media.find('a.media__link').text().strip()
            item['Type']=media.find('a.media__tag').text()
            item['description']=media.find('p.story-body__introduction').text().strip()
            yield item

【问题讨论】:

  • 首先检查页面是否使用 JavaScript 添加元素 - 在 Web 浏览器中关闭 JavaScript 并重新加载页面以查看不使用 JavaScript 可以获得什么。如果你没有看到元素,那么你将不得不使用 Selenium 来控制可以运行 JavaScript 的真实网络浏览器。
  • 我在主页的 HTML 中看不到 p.story-body__introduction - 也许您使用了错误的名称。并且看不到任何视频说明。或者它可能仅用于某些设备(即手机)或某些国家/地区。
  • 感谢您的帮助,我会尝试的。 \• 关于“p.story-body__introduction”,我确实使用它来废弃文章,但是当我将它应用到视频时不起作用。我什至尝试使用'p.media__summary',但我有同样的事情!!!您是否提出任何其他可以提供帮助的建议!
  • 您为什么认为p.story-body__introduction 存在于视频中?我在 HTML 中看不到这个元素。首先,您必须(手动)在 HTML 中检查您能得到什么——不要试图猜测。顺便说一句:当我访问页面时,我看不到任何视频说明或摘要。看来您试图获取从未存在的元素。
  • 唯一的media__summary 有主视频-但不在课堂上media--video。它在课堂上video__playermedia--video课堂上的所有视频都没有summary

标签: python web-scraping scrapy web-crawler


【解决方案1】:

我自己制作了一个刮板,可以从雅虎新闻中刮取标题。你的代码没问题。问题是 BBC 新闻可能不允许您抓取视频的描述

尝试使用代理。

抓取雅虎新闻。因为刮很容易

这是我的代码,可以从雅虎新闻中抓取所有段落,您可以将其更改为您喜欢的任何内容

import bs4
import requests
import sys
import re 
import unicodedata
import os
import random
import datetime

Current_Date_Formatted = datetime.datetime.today().strftime ('%d-%b-%Y -- %H:%M')
time = str(Current_Date_Formatted)

filename = "Yahoo World News " + time 

filename=r"D:\Huzefa\Desktop\News\World\\" +filename+ ".txt"
url = "https://news.yahoo.com/"
res = requests.get(url)
soup = bs4.BeautifulSoup(res.text, "lxml")
##
file = open(filename , 'wb')
for i in soup.select("p"):
    f=i.text
    file.write(unicodedata.normalize('NFD', re.sub("[\(\[].*?[\)\]]", "", f)).encode('ascii', 'ignore'))
    file.write(unicodedata.normalize('NFD', re.sub("[\(\[].*?[\)\]]", "", os.linesep)).encode('ascii', 'ignore'))
    file.write(unicodedata.normalize('NFD', re.sub("[\(\[].*?[\)\]]", "", os.linesep)).encode('ascii', 'ignore'))
file.close()

希望这对你有用 =)

【讨论】:

  • 非常感谢 Usama 的建议并与我分享你的代码,我很感激。不幸的是,我有一个特定的任务必须完成,我必须废弃 BBC 新闻网站的主要任务!!!
  • 您有没有其他可以提供帮助的建议!
【解决方案2】:

您有没有其他可以提供帮助的建议! – MarMarhoun

你可以下载这个应用程序Scrape-Storm它是一个人工智能驱动的 可视化网页抓取工具。由前 Google 爬虫团队构建。不 需要编程。可视化操作。使用方便。 它可以刮掉整个页面。您还可以选择要抓取的标签。你 可以以不同的格式导出您的数据。希望对你有帮助

如果我不允许发布此内容,我很抱歉。我是 StackOverflow 的新手。

我的目的只是帮助人们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多