【发布时间】:2019-05-29 00:11:59
【问题描述】:
我正在尝试制作网页抓取工具,但无法获取下一页的链接。我尝试了一些组合,但它们都不起作用。 scrapy.org 上的教程格式更简单,因此无法解决我的问题
我正在抓取的网站具有以下布局:
<nav class="nav_class">
<a class="class_1" href="1.html">
<a class="class_2" href="2.html">
<a class="class_3" href="3.html">
我想使用 css 选择器获取 3.html 链接
import scrapy
class MySpider(scrapy.Spider):
name = "flip_spider"
def start_requests(self):
urls = [
"https://www.flipkart.com/mobiles/pr?sid=tyy%2C4io&p%5B%5D=facets.processor_brand%255B%255D%3DSnapdragon&p%5B%5D=facets.serviceability%5B%5D%3Dfalse&p%5B%5D=facets.offer_type%255B%255D%3DExchange%2BOffer&otracker=clp_banner_1_10.bannerX3.BANNER_mobile-phones-store_HPUGCU9BYBF6&fm=neo%2Fmerchandising&iid=M_934db066-154e-4074-a4b1-96f56a0af28e_6.HPUGCU9BYBF6&ppt=HomePage&ppn=Home&ssid=85m4yqvgzk0000001558978084715&page=1",
]
for url in urls:
yield scrapy.Request(url, callback=self.parse)
def parse(self, response):
# page_id=response.url.split("=")[-1]
phone_details = response.css("div._1-2Iqu.row")
for ph in phone_details:
phone = ph.css("div._3wU53n::text").get()
rating = ph.css("div.hGSR34::text").get()
price = ph.css("div._1vC4OE._2rQ-NK::text").get()
yield{
"name": phone,
"rating": rating,
"price": price,
}
final = "https://www.flipkart.com/mobiles/pr?sid=tyy%2C4io&p%5B%5D=facets.processor_brand%255B%255D%3DSnapdragon&p%5B%5D=facets.serviceability%5B%5D%3Dfalse&p%5B%5D=facets.offer_type%255B%255D%3DExchange%2BOffer&otracker=clp_banner_1_10.bannerX3.BANNER_mobile-phones-store_HPUGCU9BYBF6&fm=neo%2Fmerchandising&iid=M_934db066-154e-4074-a4b1-96f56a0af28e_6.HPUGCU9BYBF6&ppt=HomePage&ppn=Home&ssid=85m4yqvgzk0000001558978084715&page=6"
next_page_id = response.css("nav._1ypTlJ a._3fVaIS::attr(href)").get()
# ^This is the line I need help with
if next_page_id is not final:
next_page = response.urljoin(next_page_id)
yield scrapy.Request(next_page, callback=self.parse)
它只抓取第一页然后停止
【问题讨论】:
-
您确定这些类存在于 HTML 代码中吗?尝试将页面下载到本地文件并使用文本编辑器打开它,然后尝试找到那些 HTML 类(例如
_1ypTlJ)。另外,考虑先使用scrapy shell来测试你的XPath 表达式,这个问题可能也可以用它重现,而且它会使你的问题代码更短。 -
我检查了网站以找出这些课程。我也做了同样的事情来找出 div 类,并且代码在那里运行良好。我仍然会尝试下载它以获得更好的外观。谢谢!
-
请注意,Web 浏览器检查器不会显示 HTML 结构。它是 DOM,它并不总是(而且通常不)代表实际的底层 HTML。它几乎总是包含额外的 HTML 元素(例如,表格中的
<tbody>)并且经常被 JavaScript 代码修改。事实上,像您的代码中那些看似随机的 HTML 类名很可能是从 JavaScript 自动生成的。 -
我不知道,谢谢你的帮助!