Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 使用scrapy单击网站上的按钮_Python_Selenium_Scrapy_Web Crawler - Fatal编程技术网

Python 使用scrapy单击网站上的按钮

Python 使用scrapy单击网站上的按钮,python,selenium,scrapy,web-crawler,Python,Selenium,Scrapy,Web Crawler,我想问一下,如何(做爬网)点击下一步按钮(更改网站的页码)(然后做更多的爬网,直到页码结束)从 我尝试将scrape与selenium结合起来,但仍然存在错误,并说第22行是“代码” self.driver=webdriver.Firefox() ^ 缩进错误:应为缩进块“ 我不知道为什么会这样,我想我的代码很好。任何人都可以解决这个问题吗 这是我的来源: from selenium import webdriver from scrapy.spider import BaseSpider fr

我想问一下,如何(做爬网)点击下一步按钮(更改网站的页码)(然后做更多的爬网,直到页码结束)从

我尝试将scrape与selenium结合起来,但仍然存在错误,并说第22行是“代码” self.driver=webdriver.Firefox() ^ 缩进错误:应为缩进块“

我不知道为什么会这样,我想我的代码很好。任何人都可以解决这个问题吗

这是我的来源:

from selenium import webdriver
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from now.items import NowItem
class MySpider(BaseSpider):
name = "nowhere"
allowed_domains = ["n0where.net"]
start_urls = ["https://n0where.net/"]

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('.loop-panel>a::attr(href)').extract_first()
        item['body'] ='' .join(article.css('.excerpt p::text').extract()).strip()
        #item['date'] = article.css('[itemprop="datePublished"]::attr(content)').extract_first()
        yield item

def __init__(self):
    self.driver = webdriver.Firefox()

    def parse2(self, response):
    self.driver.get(response.url)

    while True:
        next = self.driver.find_element_by_xpath('/html/body/div[4]/div[3]/div/div/div/div/div[1]/div/div[6]/div/a[8]/span')

        try:
            next.click()

            # get the data and write it to scrapy items
        except:
            break

    self.driver.close()`
这是我对项目伙伴的捕捉:
这是一个缩进错误。查看错误附近的行:

    def parse2(self, response):
    self.driver.get(response.url)
这两行中的第一行以冒号结尾。因此,第二行应该比第一行缩进更多

有两种可能的修复方法,具体取决于您要执行的操作。向第二个缩进级别添加缩进级别:

    def parse2(self, response):
        self.driver.get(response.url)
或者将
parse2函数移出
init`函数:

def parse2(self, response):
    self.driver.get(response.url)

def __init__(self):
    self.driver = webdriver.Firefox()

    # etc.

忽略语法和缩进错误,您的代码逻辑通常会出现问题

您要做的是创建webdriver,而不要使用它。你的蜘蛛在这里做的是:

  • 创建webdriver对象
  • self.start\u url
    中的每个url安排一个请求,在您的情况下,它只是一个
  • 下载它,生成
    Response
    对象并将其传递给
    self.parse()
  • 您的解析方法似乎找到了一些XPath并生成了一些条目,所以scrapy会生成一些找到的条目(如果有的话)
  • 完成
  • 您的parse2从未被调用,因此您的selenium webdriver从未被使用


    在这种情况下,由于您没有使用scrapy下载任何内容,因此您可以覆盖
    start\u requests()
    (您的代码缩进不足,第5行之后的所有内容都必须缩进4个空格,因为该代码属于您的类。啊,python有关于它的规则吗?————————————我不知道,在此之前我使用java或c进行编码,而这两种语言都没有类似的规则,看起来有很大不同……顺便说一句,我的所有代码似乎都可以,可以是r吗unning..但是在我添加了第19行和更多行之后,它出现了错误,我不知道为什么mate(在mozilla驱动程序之后)…是的,python中的缩进很重要,这就是定义作用域的方式,因为没有大括号等。老实说,你应该用任何编程语言进行适当的嵌入,不管有没有大括号…伙计们,我的代码…自动添加4个空格似乎没问题,但我不知道为什么当我复制粘贴到这里时,它会自动变为左对齐nt-u-顺便问一句,你对我面临的问题有什么解决方案吗?在pict上,我重新发布了我的源代码pict mate。在我像你一样重写那行代码后,它看起来还不错,但是为什么突然没有做爬行并强制关闭我的mozilla firefox,有解决方案吗?@beboy你的网络驱动程序关闭了,因为它实际上没有被使用,请帮我检查我的答案信息为什么会发生这种情况。谢谢伙计,我明天会试试,现在我已经准备好了演示文稿的i要素,我是使用python的新手,它与java或c#如此不同……因此python编程中数字的定位,列出代码对逻辑编码的影响……嘿,伙计,它成功了,主要问题是firefox v47它不兼容使用我的selenium版本,所以我确实降级了firefox,顺便问一下,你知道为什么会发生这个错误吗“TypeError:'NoneType'对象不可编辑”mate是什么意思?如果是这样的话,我想在页面的最后一页做报废处理…关于错误,这意味着它在那里说的是什么。你的代码试图通过一个
    None
    值进行迭代。我猜对于sel.css('.loop panel')中的文章,应该是这个位
    您需要检查是否有一些文章,如果没有,则中断流程,即
    如果没有sel.css('.loop panel'):return
    from selenium import webdriver
    import scrapy
    from scrapy import Selector
    
    
    class MySpider(scrapy.Spider):
        name = "nowhere"
        allowed_domains = ["n0where.net"]
        start_url = "https://n0where.net/"
    
        def start_requests(self):
            driver = webdriver.Firefox()
            driver.get(self.start_url)
            while True:
                next_url = driver.find_element_by_xpath(
                    '/html/body/div[4]/div[3]/div/div/div/div/div[1]/div/div[6]/div/a[8]/span')
                try:
                    # parse the body your webdriver has
                    self.parse(driver.page_source)
                    # click the button to go to next page 
                    next_url.click()
                except:
                    break
            driver.close()
    
        def parse(self, body):
            # create Selector from html string
            sel = Selector(text=body)
            # parse it
            for article in sel.css('.loop-panel'):
                item = dict()
                item['title'] = article.css('.article-title::text').extract_first()
                item['link'] = article.css('.loop-panel>a::attr(href)').extract_first()
                item['body'] = ''.join(article.css('.excerpt p::text').extract()).strip()
                # item['date'] = article.css('[itemprop="datePublished"]::attr(content)').extract_first()
                yield item