Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 抓取/爬网多个页面_Python_Web Scraping_Scrapy - Fatal编程技术网

Python 抓取/爬网多个页面

Python 抓取/爬网多个页面,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,到目前为止,我已经发现如何刮一个或多个网页相同的网址,但不断变化的数字。然而,我找不到如何使用子类别及其子类别来刮取页面,最终获得所需的内容。 我正在尝试删除此网站: 我正在使用Scrapy,但我不知道从哪里开始。 或者你可以建议一个更好的选择,我只是使用python并从那里进行检查 谢谢 # -*- coding: utf-8 -*- from scrapy.spiders import CrawlSpider, Rule from scrapy.linkext

到目前为止,我已经发现如何刮一个或多个网页相同的网址,但不断变化的数字。然而,我找不到如何使用子类别及其子类别来刮取页面,最终获得所需的内容。 我正在尝试删除此网站: 我正在使用Scrapy,但我不知道从哪里开始。 或者你可以建议一个更好的选择,我只是使用python并从那里进行检查

谢谢

# -*- coding: utf-8 -*-
from scrapy.spiders                 import CrawlSpider, Rule
from scrapy.linkextractors          import LinkExtractor
from scrapy.spiders                 import Spider
from scrapy                         import Selector
from ask_islam.items                import AskIslamItem
from scrapy.http                    import Request
from scrapy.linkextractors          import LinkExtractor
import  re

class AskislamSpider(Spider):
    name = "askislam"
    allowed_domains = ["askislam.org"]
    start_urls = ['http://www.askislam.org/']
    rules = [Rule(LinkExtractor(allow = ()), callback = 'parse', follow=True)]

    def parse(self, response):
        hxs = Selector(response)
        links = hxs.css('div[id="categories"] li a::attr(href)').extract()
        for link in links:
            url = 'http://www.askislam.org' + link.replace('index.html', '')
            yield Request(url, callback=self.parse_page)

    def parse_page(self, response):
        hxs = Selector(response)
        categories = hxs.css('div[id="categories"] li').extract()
        questions = hxs.xpath('a').extract()
        if(categories):
            for categoryLink in categories:
                url = 'http://www.askislam.org' + categoryLink.replace('index.html', '')
                yield Request(url, callback=self.parse_page)
                # print (question)
编辑

def start_requests(self):
    yield Request("http://www.askislam.org", callback=self.parse_page)

def parse_page(self, response):
    hxs = Selector(response)
    categories = hxs.css('#categories li')
    for cat in categories:
        item = AskIslamItem()
        link = cat.css('a::attr(href)').extract()[0]
        link = "http://www.askislam.org" + link

        item['catLink'] = link

        logging.info("Scraping Link: %s" % (link))

        yield Request(link, callback=self.parse_page)
        yield Request(link, callback=self.parse_categories)

def parse_categories(self, response):
    logging.info("The Cat Url")
使用这些子类别的xPath或CSS选择器读取该页面的链接,然后执行另一个
Request()

编辑:

import logging

class AskislamSpider(Spider):

    name = "askislam"

    def start_requests(self):

        yield Request("http://www.askislam.org/", callback=self.parse_page)

    def parse_page(self, response):
        categories = response.css('#categories li').extract()
        for cat in categories:
            link = cat.css("a::attr(href)").extract()[0]
            link = "http://www.askislam.org/" + link

            logging.info("Scraping Link: %s" % (link))

            yield Request(link, callback=self.parse_page)

它的可能副本可能有助于提供一些您能够刮取的代码。对其他人来说,详细说明现有代码比为您创建一个完整的爬行器更容易。但这不是只会重复一次子类别吗?我要做的是跟踪链接,直到页面上不存在id=categories的div标记。使用选择器查看是否存在
div\categories
,如果存在,则进行另一个
Request()
。。。就这样。。顺便说一句,你应该发布一些你已经尝试过的代码。。。否则我们不能help@AssabAmad请看我在回答中添加的代码,只需复制粘贴,它应该可以工作感谢它的工作。我现在正试图通过这些链接获取有关它的详细信息。函数中是否可能产生多个请求<代码>屈服请求(link,callback=self.parse_页面)
屈服请求(link,callback=self.parse_类别)
是的,可能会产生多个请求。。。您可以根据自己的需要提供任意多的请求。。。请接受我的回答。。向上投票