【问题标题】:Scraping MSN News with Scrapy用 Scrapy 抓取 MSN 新闻
【发布时间】:2017-08-01 12:18:49
【问题描述】:

我目前正在尝试使用 scrapy 抓取 MSN 新闻,并且在使用 scrapy shell 时从浏览器获得正确响应时遇到了一些困难。

当我在浏览器中转到https://www.msn.com/en-us/news/world 时,我看到: 这是完美的,因为这就是页面应该看起来的样子,但是当我运行命令scrapy shell https://www.msn.com/en-us/news/world 然后view(response) 这就是我看到的。

我尝试禁用 javascript 以查看内容是否正在使用 ajax 加载,这就是它无法正常工作的原因,但所做的只是阻止加载缩略图。有人知道它为什么会这样吗?

【问题讨论】:

    标签: web-scraping scrapy web-crawler scrapy-spider


    【解决方案1】:

    该网站肯定有很多 JavaScript 正在运行。您应该如何解决这个问题,即在一个实例中禁用 javascript 并在旁边有一个普通实例。
    然后您可以四处挖掘并进行比较,即找到缩略图 id 并搜索它的 no-javascript 源 - 它可能位于 json 或 javascript 变量中的某个位置。

    This is what scrapy sees 禁用了 javascript。
    您可以看到那里有文章名称和简短描述。如果您检查标题,您甚至可以看到还有指向缩略图的链接!

    articles = response.xpath("//li[@data-m]/a[@aria-label]")
    for article in articles: 
        # thumbnail
        response.xpath('img/@data-src').extract_first()
        # '{"default":"//img-s-msn-com.akamaized.net/tenant/amp/entityid/AAp0iW6.img?h=414&w=624&m=6&q=60&u=t&o=t&l=f&f=jpg&x=1280&y=688"}'
        # title 
        article.xpath("@aria-label").extract_first()
        # 'north korea can hit most of united states: u.s. officials provided by reuters'
        # description
        article.xpath("/img/@alt").extract_first()
        # This Friday, July 28, 2017, photo distributed by the Nort...
    

    【讨论】:

    • 我不确定禁用 javascript 是如何让你得到你在该图片中显示的结果,当我通过 chrome 禁用 javascript 时,我看到的是:link
    • 是的,articles 只是一个空白数组,scrapy 仍然只获取我在问题中显示截图的网页
    • @jason 很奇怪,您可以发布您的settings.py 或确保将USER_AGENT 设置设置为看起来像浏览器的东西吗?默认情况下,scrapy 将自己标识为scrapy <version>,因此 msn 可能会阻止您。例如试试USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0'
    • MSN从其他杂志获取新闻有版权吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多