【问题标题】:scraping url and title from nested anchor tag从嵌套的锚标记中抓取 url 和标题
【发布时间】:2015-06-03 10:47:18
【问题描述】:

这是我第一个使用 scrapy 的爬虫。

我正在尝试从https://www.google.co.in/trends/hotvideos#hvsm=0 站点删除视频网址、标题。

import scrapy
from scrapy.item import Item, Field
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class CraigslistItem(Item):
    title = Field()
    link = Field()

class DmozSpider(scrapy.Spider):
    name = "google"
    allowed_domains = ["google.co.in"]
    start_urls = [
        "https://www.google.co.in/trends/hotvideos#hvsm=0"
    ]

    def parse(self, response):
        #for sel in response.xpath('//body/div'):
    hxs = HtmlXPathSelector(response)
    sites = hxs.xpath("//span[@class='single-video-image-container']")
    items = []
    for sel in response.xpath("//span[@class='single-video-image-container']"):
        item = CraigslistItem()
        item['title'] = sel.xpath('a/text()').extract()
        item['link'] = sel.xpath('a/@href').extract()   
        items.append(item)
        print items

对我做错的事情进行一般性的演练将是非常可观的。

【问题讨论】:

  • 你不会得到这个工作,因为POST 请求显示这些电影列表。尝试使用scrapy form-request
  • @Jathin:谢谢,但我真的听不懂。你能详细说明一下吗
  • 尽管您向此url 发出请求以获取电影列表,但实际上在内部触发了ajax-post-request,并且对该请求作为响应,您将在该页面中获得电影列表
  • 你不需要任何 xpath 来获取数据,因为响应本身是一个 json

标签: python web-scraping scrapy


【解决方案1】:

使用帮助 Scrapy FormRequest 来完成它。

from scrapy.http import FormRequest
import json

class DmozSpider(scrapy.Spider):
    name = "google"
    allowed_domains = ["google.co.in"]
    start_urls = [
        "https://www.google.co.in/trends/hotvideos#hvsm=0"
    ]

    def parse(self, response):
        url = 'https://www.google.co.in/trends/hotvideos/hotItems'
        formdata = {'hvd':'','geo': 'IN','mob': '0','hvsm': '0'}
        yield FormRequest(url=url, formdata=formdata, callback=self.parse_data)

    def parse_data(self, response):
        json_response = json.loads(response.body)
        videos = json_response.get('videoList')
        for video in videos:
            item = CraigslistItem()
            item['title'] = video.get('title')
            item['link'] = video.get('url')
            yield item

【讨论】:

  • 非常感谢,但我没有看懂代码,您能补充说明吗?以及为什么要更改网址名称,即https://www.google.co.in/trends/hotvideos/hotItems
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2021-03-22
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
相关资源
最近更新 更多