在python中抓取页面的一些帮助

在python中抓取页面的一些帮助,python,web-scraping,scrapy,web-crawler,Python,Web Scraping,Scrapy,Web Crawler,我已经抓取了文章的描述。现在,我试图从BBC新闻网站上抓取一段视频的描述,但它返回一个空字符串。有什么建议吗 这是我的代码: class BbcNewsSpider(CrawlSpider): name = 'BBCNews' start_urls = ['https://www.bbc.com/'] rules=(Rule(LinkExtractor(restrict_xpaths="//li[contains(@class,'orb-nav-home')]/

我已经抓取了文章的描述。现在,我试图从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

我自己制作了一个刮刀,从雅虎新闻中刮取标题。你的密码没问题。问题是,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()

希望这对你有用=)

你还有什么建议可以帮助你吗!——马尔霍恩

你可以下载这个应用程序,它是一个人工智能驱动的应用程序 可视化网页抓取工具。由前谷歌爬虫团队建造。不 需要编程。视觉操作。易于使用。 它可以刮掉整页。您还可以选择要刮取的标记。你 可以以不同格式导出数据。我希望这对你有帮助

我很抱歉,如果我不被允许张贴这个。我是个新手


我的目的只是帮助人们首先检查页面是否使用JavaScript添加元素——在web浏览器中关闭JavaScript并重新加载页面,看看不使用JavaScript可以得到什么。如果你看不到元素,那么你将不得不使用Selenium来控制真正的web浏览器,它可以运行JavaScript。我在主页上的HTML中没有看到
p.story-body\uu简介
——可能你使用了错误的名称。而且看不到任何视频的字幕。或者它只在某些设备(如手机)或某些国家/地区使用。谢谢你的帮助,我会试试。\•关于“p.story-body_______________________________________。我甚至尝试使用“p.media\uuuu summary”,但我有同样的东西!!!你有没有其他的建议可以帮助你!你为什么认为
p.story-body\u introduction
存在于视频中?我在HTML中没有看到这个元素。首先,你必须(手动)在HTML中检查你能得到什么-不要试图猜测。顺便说一句:当我访问网页,然后我没有看到任何描述或视频摘要。似乎您试图获取从未存在过的元素。唯一的
media\uu summary
有主视频-但它不在类
media--video
中。它在类
video\u player
中。课堂上所有的视频
媒体-视频
没有
摘要
非常感谢Usama的建议并与我分享您的代码,我非常感谢。不幸的是,我有一个具体的任务,我必须做的,我必须放弃BBC新闻网站的主要任务!!!你有没有其他的建议可以帮助你!