使用SgmlLinkExtractor进行Scrapy

时间:2015-03-23 05:41:20

标签: python regex scrapy

我正在尝试抓取表单的页面 http://www.wynk.in/music/song/variable_underscored_alphanumeric_string.html。我想从笔记本电脑上打这样的URL,但由于网址只适用于应用程序和WAP,我已经给了用户代理 'settings.py中的'Mozilla / 5.0(Linux; U; Android 2.3.4; fr-fr; HTC Desire Build / GRJ22)AppleWebKit / 533.1(KHTML,如Gecko)版本/ 4.0 Mobile Safari / 533.1'。 我的代码文件是

from scrapy import Selector
from wynks.items import WynksItem

from scrapy.contrib.spiders import CrawlSpider, Rule

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor


class MySpider(CrawlSpider):

name = "wynk"
#allowed_domains = ["wynk.in"]
start_urls = ["http://www.wynk.in/", ]
#start_urls = []
rules = (Rule(SgmlLinkExtractor(allow=[r'/music/song/\w+.html']), callback='parse_item', follow=True),)

def parse_item(self, response):
    hxs = Selector(response)
    if hxs:
        tds = hxs.xpath("//div[@class='songDetails']//tr//td")
        if tds:
            for td in tds.xpath('.//div'):
                titles = td.xpath("a/text()").extract()
                if titles:
                    for title in titles:
                        print title

我通过运行来启动代码     scrapy crawl wynk -o abcd.csv -t csv

但是,我只得到这个结果     抓取(200)http://www.wynk.in/> (引用者:无)     2015-03-23 11:06:04 + 0530 [wynk]信息:关闭蜘蛛(已完成) 我做错了什么?

1 个答案:

答案 0 :(得分:2)

由于在主页上没有与上述URL的直接链接,因此通过获取所有链接并通过创建递归请求递归访问音乐/歌曲页面来解决。将继承更改为继承自Spider而不是CrawlSpider