chr*_*sHG 5 url scrapy python-3.x
class HomedepotcrawlSpider(scrapy.Spider):
name = 'homeDepotCrawl'
allowed_domains = ['homedepot.com']
start_urls = ['https://www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=0']
def parse(self, response):
#call home depot function
for item in self.parseHomeDepot(response):
yield item
nextPageSelect = '.hd-pagination__link'
next_page = response.css(nextPageSelect).getall()
if next_page:
yield scrapy.Request(
response.urljoin(next_page),
callback=self.parse
)
Run Code Online (Sandbox Code Playgroud)
编辑-
我获得 .hd-pagination__link 的方式是使用 google chrome 的 CSS 选择器扩展并选择下一页图标(附截图)
所以我尝试了一些事情,这是对我来说最有意义的方式,我认为我只是为下一页抓取了错误的对象。截至目前,我的程序仅从第一页获取数据,似乎忽略了遍历页面的代码块。
我发现了一个带有 URL 的模式,其中页码以 24 的增量表示(可能是由于项目编号?)。前任:
第 1 页:https : //www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=0
第 2 页:https : //www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=24
第 3 页:https : //www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=48 。. . . . . .
第 n 页:https : //www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=[( n -5 *24) - 24]
等。
当我尝试测试与页码相关的代码[在 Na0 = x 之后增加数字] 时,我只会循环第一页 x 次。(我的输出将是重复 x 次的第一页(24 项)。
我也研究了爬行蜘蛛,但无法真正理解它/实现。
对我的代码/对其他方法的澄清的任何帮助将不胜感激!
这也不是我的整个程序,我保留了我的 parseHomeDepot 函数,因为我认为没有必要,但是如果需要代码,请告诉我!
小智 2
以下是您想要执行的操作的一些工作代码:
\n\nimport scrapy\nfrom urllib.parse import urlsplit, urljoin\n\nclass HomedepotSpider(scrapy.Spider):\n name = \'homedepot\'\n start_urls = [\'https://www.homedepot.com/b/N-5yc1v/Ntk-ProductInfoMatch/Ntt-zline?NCNI-5&experienceName=default&Nao=0\']\n\n def parse(self, response):\n\n # Here you do something with your items\n\n next_page = response.css(\'a.hd-pagination__link[title=Next]::attr(href)\').get()\n if next_page is not None:\n o = urlsplit(response.url)\n base_url = f\'{o.scheme}://{o.netloc}\'\n next_page_url = urljoin(base_url,next_page)\n yield response.follow(next_page_url, callback=self.parse)\nRun Code Online (Sandbox Code Playgroud)\n\n我在这段代码中要指出的主要内容是:
\n\nresponse.url) 的基本部分,然后附加您通过 urljoin 获得的相对值这里还有 scrapy 日志,显示它已抓取 31 个页面。如果你执行它,你应该得到这个
\n\n2020-02-21 10:42:04 [scrapy.statscollectors] INFO: Dumping Scrapy stats:\n{\'downloader/request_bytes\': 44799,\n \'downloader/request_count\': 31,\n \'downloader/request_method_count/GET\': 31,\n \'downloader/response_bytes\': 1875031,\n \'downloader/response_count\': 31,\n \'downloader/response_status_count/200\': 31,\n \'dupefilter/filtered\': 1,\n \'elapsed_time_seconds\': 13.690273,\n \'finish_reason\': \'finished\',\n \'finish_time\': datetime.datetime(2020, 2, 21, 10, 42, 4, 145686),\n \'log_count/DEBUG\': 32,\n \'log_count/INFO\': 10,\n \'memusage/max\': 52195328,\n \'memusage/startup\': 52195328,\n \'request_depth_max\': 31,\n \'response_received_count\': 31,\n \'scheduler/dequeued\': 31,\n \'scheduler/dequeued/memory\': 31,\n \'scheduler/enqueued\': 31,\n \'scheduler/enqueued/memory\': 31,\n \'start_time\': datetime.datetime(2020, 2, 21, 10, 41, 50, 455413)}\n2020-02-21 10:42:04 [scrapy.core.engine] INFO: Spider closed (finished)\nRun Code Online (Sandbox Code Playgroud)\n\n我希望这有帮助!!
\n| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |