Scrapy - 刮擦时发现刮擦链接

时间:2016-11-25 16:17:03

标签: python scrapy

我只能假设这是Scrapy最基本的事情之一,但我无法弄清楚如何做到这一点。基本上,我抓了一页来获取包含本周更新的网址列表。然后我需要逐个进入这些网址并从中获取信息。我目前有两个刮刀设置,他们完全手动工作。所以我首先从第一个刮刀上刮下网址,然后在第二个刮刀上硬编码为start_urls []。

最好的方法是什么?是否像在刮刀文件中调用另一个函数一样简单,它接受一个URL列表并在那里进行刮擦?

这是获取网址列表的刮刀:

class MySpider(scrapy.Spider):
    name = "myspider"

    start_urls = [ .....
    ]


    def parse(self, response):
        rows = response.css('table.apas_tbl tr').extract()
        urls = []
        for row in rows[1:]:
            soup = BeautifulSoup(row, 'lxml')
            dates = soup.find_all('input')
        urls.append("http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value']))

这是刮刀,然后一个接一个地通过网址:

class Planning(scrapy.Spider):
    name = "planning"

    start_urls = [
       ...
    ]


    def parse(self, response):
        rows = response.xpath('//div[@id="apas_form"]').extract_first()
        soup = BeautifulSoup(rows, 'lxml')
        pages = soup.find(id='apas_form_text')
        for link in pages.find_all('a'):
            url = 'myurl.com/{}'.format(link['href'])

        resultTable = soup.find("table", { "class" : "apas_tbl" })

然后我将resultTable保存到文件中。目前,我将获取urls列表的输出并将其复制到另一个scraper中。

1 个答案:

答案 0 :(得分:0)

对于您使用parse找到的每个链接,您都可以请求它并使用其他函数解析内容:

class MySpider(scrapy.Spider):
    name = "myspider"

    start_urls = [ .....
    ]

    def parse(self, response):
        rows = response.css('table.apas_tbl tr').extract()
        urls = []
        for row in rows[1:]:
            soup = BeautifulSoup(row, 'lxml')
            dates = soup.find_all('input')
            url = "http://myurl{}.com/{}".format(dates[0]['value'], dates[1]['value'])
            urls.append(url)
            yield scrapy.Request(url, callback=self.parse_page_contents)

    def parse_page_contents(self, response):
        rows = response.xpath('//div[@id="apas_form"]').extract_first()
        soup = BeautifulSoup(rows, 'lxml')
        pages = soup.find(id='apas_form_text')
        for link in pages.find_all('a'):
            url = 'myurl.com/{}'.format(link['href'])

        resultTable = soup.find("table", { "class" : "apas_tbl" })
相关问题