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

标签 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')]//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/

相关文章:

python - 使用Scrapy时如何导出为csv?

python - Scrapy - 已抓取 (200) 和引用地址 : none

python - 除了 subprocess.Open 之外,有什么方法可以从 python 调用 "hadoop cp/distcp"吗?

Python-替换字符串中特定位置出现的所有字母

python - 如何使用 BeautifulSoup 抓取表格?

python - 无法通过 wget e 或脚本访问 url

html - 使用R通过链接名称获取下载URL

python - pandas 应用参数没有 lambda 的函数

python - 使用 python 检测应用程序启动

python - scrapy 的起始 URL 的 URL 生成器(仅读取第一个 URL),为什么?