如何获取详细信息页面并通过Scrapy访问链接?

时间:2018-07-12 08:16:40

标签: python python-3.x scrapy web-crawler scrapy-spider

我有问题。我想抓取一个成人故事网站。而且我有许多网站可供抓取。例如,我要抓取2个网站,如下所示:

import scrapy
from scrapy.selector import HtmlXPathSelector
from scrapy.selector import Selector
from scrapy.http import HtmlResponse

class Cerita(scrapy.Spider):
   name = "cerita"
   allowed_domains = [
      "ceritabokep.me",
      "ceritangewe.com"
   ]

   start_urls = [
       'http://ceritabokep.me/',
       'https://ceritangewe.com'
   ]

   def parse(self, response):
      divs = response.xpath('//div')
      for p in divs.xpath('.//p'):
        yield {
            'content': p.extract(),
            'url': response.request.url
        }

    next_page = response.css('a::attr(href)')
    if next_page is not None:
        for href in response.css('a'):
            yield response.follow(href, callback=self.parse)

我只想在每个页面的网站上获得段落或文本。但是,当我运行Spider时,Spider只会在首页中突出显示亮点,直到到达详细信息页面为止。如下所示:

[
{"content": "<p itemprop=\"description\" class=\"post_excerpt\">Seperi biasa 
akhir pekan semua terlihat santai tidak melakukan aktivitas tapi seperti 
biasa ibuku menghadiri arisan ibu berpesan untuk menjaga rumah,\nibu : 
\u201cJovita, ibu mau arisan di antar sama adik, kamu jaga rumah 
ya\u201d\naku : \u201cia ibu ku sayang, Jovita dirumah aja kok\u201d  \u00a0  
ibu : \u201cooo...</p>", "url": "http://ceritabokep.me/"},
{"content": "<p itemprop=\"description\" class=\"post_excerpt\">Aku kerja 
sebagai trainer berenang disatu sport hall yang berada di kawasan prumahan 
elit yang mayoritas penghuninya warga keturunan. Perumahannya mewah, rumahnya 
gak banyak tapi besar-besar. Sport Hallnya lengkap,lapangan tenis, gym,kolam 
renang,malah disediakan juga lapangan basket merangkap volley dan bulu 
tangkis.kalo peralatan untuk tenis meja...</p>", "url": 
"http://ceritabokep.me/"},
]

由于链接了解更多,它已断开连接 我想抓取网站上的所有页面,如何跟踪所有页面链接并获取详细信息页面?因为每个网站都有不同的元素。

1 个答案:

答案 0 :(得分:0)

您要在多个域中抓取发现文章的网址,为此,您需要为每个网站建立案例,或使用一些智能算法来确定哪些网址是文章。

如果您只有几个网站(如示例中所示),则最简单的方法是在以下情况下进行编码:

def parse(self, response): 
    # css selector for domain #1
    articles = response.css('h5 a::attr(href)').extract()
    if not articles:
        # if nothing found use css selector for domain #2
        articles = response.css('h2 a::attr(href)').extract()

或者从示例中可以看到,两个域的所有文章的网址中都有/cerita

def parse(self, response): 
    # css selector for domain #1
    urls = response.css('a::attr(href)').extract()
    articles = [url for url in urls if '/cerita' in url]