在python中抓取页面的一些帮助
我已经抓取了文章的描述。现在,我试图从BBC新闻网站上抓取一段视频的描述,但它返回一个空字符串。有什么建议吗 这是我的代码:在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')]/
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新闻网站的主要任务!!!你有没有其他的建议可以帮助你!