我已经抓取了文章的描述。现在,我试图从 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()
希望这对你有用 =)
关于python - 一些帮助在 python 中抓取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61767016/