我正试图从亚马逊印度网站上搜集数据。在以下情况下,我无法使用yield()方法收集响应并解析元素:1)我必须从一个产品页面移动到另一个审阅页面2)我必须从一个审阅页面移动到另一个审阅页面
产品页
评论页
代码流:
1) customerReviewData()调用getCustomerRatingsAndComments(响应)
2) GetCustomerRatings和Comments(response)查找审阅页面的URL,并使用getCrrFromReviewPage(request)作为回调方法调用收益请求方法,使用此审阅页面的URL
3)getCrrFromRevewPage()获取firstreet view页面的新响应,并从第一个评论页面(页面加载)中抓取所有元素,并将其添加到客户端评论数据列表[]
4)获取下一页的URL(如果存在),并递归调用getCrrFromRevewPage()方法,从下一页抓取元素,直到抓取所有的评论页面
5)所有的评论被添加到客户评论DataList[]
我尝试过使用yield()修改参数,还查阅了有关yield()和请求/响应yield()的详细文档
# -*- coding: utf-8 -*-
import scrapy
import logging
customerReviewDataList = []
customerReviewData = {}
#Get product name in <H1>
def getProductTitleH1(response):
titleH1 = response.xpath('normalize-space(//*[@id="productTitle"]/text())').extract()
return titleH1
def getCustomerRatingsAndComments(response):
#Fetches the relative url
reviewRelativePageUrl = response.css('#reviews-medley-footer a::attr(href)').extract()[0]
if reviewRelativePageUrl:
#get absolute URL
reviewPageAbsoluteUrl = response.urljoin(reviewRelativePageUrl)
yield Request(url = reviewPageAbsoluteUrl, callback = getCrrFromReviewPage())
self.log("yield request complete")
return len(customerReviewDataList)
def getCrrFromReviewPage():
userReviewsAndRatings = response.xpath('//div[@id="cm_cr-review_list"]/div[@data-hook="review"]')
for userReviewAndRating in userReviewsAndRatings:
customerReviewData[reviewTitle] = response.css('#cm_cr-review_list .review-title span ::text').extract()
customerReviewData[reviewDescription] = response.css('#cm_cr-review_list .review-text span::text').extract()
customerReviewDataList.append(customerReviewData)
reviewNextPageRelativeUrl = response.css('#cm_cr-pagination_bar .a-pagination .a-last a::attr(href)')[0].extract()
if reviewNextPageRelativeUrl:
reviewNextPageAbsoluteUrl = response.urljoin(reviewNextPageRelativeUrl)
yield Request(url = reviewNextPageAbsoluteUrl, callback = getCrrFromReviewPage())
class UsAmazonSpider(scrapy.Spider):
name = 'Test_Crawler'
allowed_domains = ['amazon.in']
start_urls = ['https://www.amazon.in/Philips-Trimmer-Cordless-Corded-QT4011/dp/B00JJIDBIC/ref=sr_1_3?keywords=philips&qid=1554266853&s=gateway&sr=8-3']
def parse(self, response):
titleH1 = getProductTitleH1(response),
customerReviewData = getCustomerRatingsAndComments(response)
yield{
'Title_H1' : titleH1,
'customer_Review_Data' : customerReviewData
}
我得到了以下回应:
{'Title_H1': (['Philips Beard Trimmer Cordless and Corded for Men QT4011/15'],), 'customer_Review_Data': <generator object getCustomerRatingsAndComments at 0x048AC630>}
“Customer_review_Data”应该是标题和审查的裁决列表
我不知道我在这里犯了什么错误。
当我使用log()或print()查看customerReviewDataList[]中捕获的数据时,也无法在控制台中查看数据。
我能够刮所有的评论在客户评论DataList[],如果他们存在于产品页面,
在这个场景中,我必须使用屈服函数,我得到的输出如上所述[https://ibb.co/kq8w6cf]
这就是我想要的输出:
{'customerReviewTitle': ['Difficult to find a charger adapter'],'customerReviewComment': ['I already have a phillips trimmer which was only cordless. ], 'customerReviewTitle': ['Good Product'],'customerReviewComment': ['Solves my need perfectly HK']}]}
任何帮助都很感激。提前感谢。
您应该完成Scrapy教程。下面的链接部分应该对您特别有帮助。
这是代码的简化版本:
def data_request_iterator():
yield Request('https://example.org')
class MySpider(Spider):
name = 'myspider'
start_urls = ['https://example.com']
def parse(self, response):
yield {
'title': response.css('title::text').get(),
'data': data_request_iterator(),
}
相反,它应该是这样的:
class MySpider(Spider):
name = 'myspider'
start_urls = ['https://example.com']
def parse(self, response):
item = {
'title': response.css('title::text').get(),
}
yield Request('https://example.org', meta={'item': item}, callback=self.parse_data)
def parse_data(self, response):
item = response.meta['item']
# TODO: Extend item with data from this second response as needed.
yield item
问题内容: 我正在尝试从PGA.com网站上获取数据,以获取美国所有高尔夫球场的表格。在我的CSV表中,我想包括高尔夫球场的名称,地址,所有权,网站,电话号码。有了这些数据,我想对其进行地理编码并放入地图中,并在计算机上拥有本地副本 我利用Python和Beautiful Soup4提取了我的数据。到目前为止,我已经提取了数据并将其导入CSV,但是现在我遇到了从PGA网站上的多个页面抓取数据的问题
主要内容:多级页面分析,爬虫增量抓取,程序代码实现前面讲解的爬虫案例都是单级页面数据抓取,但有些时候,只抓取一个单级页面是无法完成数据提取的。本节讲解如何使用爬虫抓取多级页面的数据。 在爬虫的过程中,多级页面抓取是经常遇见的。下面以抓取二级页面为例,对每级页面的作用进行说明: 一级页面提供了获取二级页面的访问链接。 二级页面作为详情页用来提取所需数据。 一级页面以 标签的形式链接到二级页面,只有在二级页面才可以提取到所需数据。 多级页面分析 下面
我想刮从多个网站与类似的网址的,如https://woollahra.ljhooker.com.au/our-team, https://chinatown.ljhooker.com.au/our-team和https://bondibeach.ljhooker.com.au/our-team. 我已经写了一个脚本,第一个网站的工作,但我不知道如何告诉它从其他两个网站刮。 我的代码: 有没有一种方
问题内容: 我正在尝试抓取此网站:http : //data.eastmoney.com/xg/xg/ 到目前为止,我已经使用selenium执行javascript并抓取了表格。但是,现在我的代码仅使我获得第一页。我想知道是否有一种方法可以访问其他17个页面,因为当我单击下一页时,URL不会更改,因此我不能每次都遍历另一个URL 下面是我到目前为止的代码: 还是我每次单击后都可以使用webdri
最近,我一直试图从一个网站上获取大量的定价,从一个页面开始,每个项目的页面都链接到起始页面。我希望运行一个脚本,允许我单击某个项目的框,删除该项目的定价和描述,然后返回起始页并继续该循环。然而,有一个明显的问题,我在刮掉第一件物品后遇到了。返回起始页后,容器没有定义,因此出现了一个陈旧的元素错误,该错误会中断循环并阻止我获取其余的项。这是我使用的示例代码,希望能够一个接一个地刮去所有项目。 然而,
本文向大家介绍PHP cURL库函数抓取页面内容,包括了PHP cURL库函数抓取页面内容的使用技巧和注意事项,需要的朋友参考一下 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能提供 URL 请求相关的各种细节信息。最爽的是,PHP 也支持 cURL 库。 本文将介绍 cURL 的一些高级特性,以及在 PHP 中如何运用它。 1