如何在网站上删除所有页面(第1页到无限)

时间:2016-07-25 04:34:04

标签: python xpath web-scraping css-selectors scrapy

我希望从this link中删除 每一件事都没关系,我的成功取消了它的成功

然后我在想,如果我想要删除所有页面(第一页到无穷大取决于数据库文章)怎么样?

我是使用python和scrapy的新手,在此之前我使用java& c#...他们的两个与python如此不同,但对我来说没问题

这是我的来源

import datetime
import urlparse
import socket
import scrapy
from scrapy.loader.processors import MapCompose, Join
from scrapy.loader import ItemLoader
from scrapy.http import Request

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from thehack.items import NowItem

class MySpider(BaseSpider):
    name = "nowhere"
    allowed_domains = ["n0where.net"]
    start_urls = ["https://n0where.net/"]


    def parse(self, response):
    # Get the next index URLs and yield Requests
        next_selector = response.xpath('/html/body/div[4]/div[3]/div/div/div/div/div[1]/div/div[6]/div/a[8]')
        for url in next_selector.extract():
            yield Request(urlparse.urljoin(response.url, url))

    def parse(self, response):
        for article in response.css('.loop-panel'):
            item = NowItem()
            item['title'] = article.css('.article-title::text').extract_first()
            item['link'] = article.css('.overlay-link::attr(href)').extract_first()
            item['body'] ='' .join(article.css('.excerpt p::text').extract()).strip()
            yield item

任何人都知道如何解决我的问题,我的来源没问题,但它唯一的报废页面1,如果我想自动报废下一页怎么样?

在交配之前感谢:)

1 个答案:

答案 0 :(得分:0)

这个网站上的分页很难。如果您检查浏览器正在做什么,您会看到它正在向https://n0where.net/wp-admin/admin-ajax.php

发出带有大量参数的AJAX POST请求

firebug inspect tab

您可以通过几种方式复制此请求。一种方法是将检查员显示的参数转换为dict并使用它创建scrapy.FormRequest

formdata = {'rating': '', 'layout': 'd', 'excerpt': '1', 'paginated': '2', 'award': '', 'sorter': 'recent', 'disabletrending': '', 'numarticles': '12', 'disablecategory': '', 'meta': '1', 'location': 'loop', 'disablecompare': '', 'action': 'itajax-sort', 'authorship': '', 'size': '', 'badge': '', 'thumbnail': '1', 'loop': 'main', 'icon': '1'}
next_page = 3  # figure out what next page will be
formdata.upadte('paginated': next_page)  # update page
req = FormRequest('https://n0where.net/wp-admin/admin-ajax.php', formdata=formdata, callback=self.parse_next_page)
yield req

现在看起来你得到的响应是带有大量数据的json响应,但简而言之,你只需要获取'content'中的html代码并解析它,因为它是你的新页面。 firebug network tab

然后冲洗并重复。