【发布时间】: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__player。media--video课堂上的所有视频都没有summary
标签: python web-scraping scrapy web-crawler