我正在使用Scrapy并尝试抓取this网址,当我在页面上请求有关产品的任何数据时,我就会把它拿出来。但是具有paginator类和id = paginator1的div返回为空,即使它是一个引用下一页的表。我已经尝试过为表和css选择器使用xPath选择器,但两者都返回空。 这是我尝试过的,使用css
In [29]: response.css('span a::attr(href)').extract()
Out[29]:
['/registration/formregistration/new',
'/',
'/catalog/solntsezaschitnye_ochki',
'http://wezom.com.ua/prodvizhenie']
和
In [31]: response.xpath('//*[@id="paginator1"]/table/tbody/tr[1]/td[2]/span')
Out[31]: []
答案 0 :(得分:1)
使用JavaScript生成分页,如HTML中所示:
<div class="paginator" id="paginator1"></div>
<div class="paginator_pages">Страниц: 14</div>
<script type="text/javascript">
/*pag1 = new Paginator("id div", vsego stranic, kol-vo na stranice, tekuchay stranica, "url");*/
pag1 = new Paginator("paginator1", 14, 10, 1, "/catalog/s_o_u_l_/page/", "/catalog/s_o_u_l_");
</script>
您可以从<script>
块中提取所有相关信息:
import ast
script = response.xpath('//script[contains(text(), "paginator1")]/text()').extract()[0].strip()
paginator = script.splitlines()[1].strip().split('new Paginator')[1].rstrip(';')
paginatorHolderId, pagesTotal, pagesSpan, pageCurrent, baseUrl = ast.literal_eval(paginator)
然后,您可以根据the pagination script中的逻辑构建分页网址(或只查看网址的内容)。
答案 1 :(得分:0)
如果您查看实际的html源代码(response.text
),您会看到以下内容:
<div class="paginator" id="paginator1"></div>
<div class="paginator_pages">Страниц: 14</div>
<script type="text/javascript">
/*pag1 = new Paginator("id div", vsego stranic, kol-vo na stranice, tekuchay stranica, "url");*/
pag1 = new Paginator("paginator1", 14, 10, 1, "/catalog/s_o_u_l_/page/", "/catalog/s_o_u_l_");
</script>
正如您所看到的,div确实是空的,并通过javascript填充。
您可以通过两种方式获取这些链接: