我有问题。我想抓取一个成人故事网站。而且我有许多网站可供抓取。例如,我要抓取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/"},
]
由于链接了解更多,它已断开连接 我想抓取网站上的所有页面,如何跟踪所有页面链接并获取详细信息页面?因为每个网站都有不同的元素。
答案 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]