Scrapy 爬虫的响应只包含网站的部分内容
Scrapy crawler's response contains only parts of the website
我创建了一个爬虫来存储像 American Eagle 这样的网站上的所有目录。但是,在响应中,只有所有目录的一个子集可用。
我 运行 scrapy shell 有:'scrapy shell "https://www.ae.com/web/browse/category.jsp?catId=cat10025&navdetail=mega:men:c2:p1" '
然后我 select 适当的 class 通过 'res = response.css('#facetResults').css('.sProd')'
len(res) ~ 20。但是,如果我们快速访问 MEN/Tops/ 的 american eagle 网页,您会看到有远远超过 20 项可用。
我已经尝试更改 css select 或者但是没有成功.. 请帮助谢谢! :)
如果将浏览器开发工具中的 HTML 代码与原始源代码进行比较,您会发现浏览器 HTML 控制台显示了所有项目,而原始代码仅显示 20其中
所有目录信息都存储在一个名为 category_json
的 JS 变量中,它始终存在于正文中,无需与页面交互。
我建议您检索该变量并从中提取信息,我使用 scrapy shell:
对该代码进行了一些测试
In [1]: import re, json
In [2]: data_json = re.search('category_json = ({.*})', response.body).group(1)
In [3]: data = json.loads(data_json)
In [4]: products = data['availablePrds'].keys()
In [5]: data['availablePrds'][products[0]]
Out[5]:
{u'availableColorIds': [],
u'brandName': u'AEO',
u'bundleCatId': u'',
u'classId': u'0164',
u'colorImageSelectionData': {u'100': {u'colorNam
u'colorPrdId': u'0164_3898_100',
u'factoryExclusive': False,
u'greatGift': False,
u'imgViews': [u'_f', u'_b'],
u'isAvailable': True,
u'newArrival': True,
u'webExclusive': False}},
u'contextRoot': u'web',
u'defaultURL': u'/browse/product_details.jsp',
u'firstAvailableColorPrdId': u'0164_3898_100',
u'hasBundle': False,
u'isAvailable': False,
u'isClearance': False,
u'isGWP': False,
u'isHazMat': False,
u'listPrice': u'\u20ac22.36 EUR',
u'marketingMessage': u'Buy One Get One 50% Off',
u'prdId': u'0164_3898',
u'prdName': u'AEO NYC Graphic T-Shirt',
u'rating': u'',
u'salePrice': u'\u20ac22.36 EUR',
u'styleId': u'3898'}
如果您遍历该变量,您可以检索每个产品所需的所有信息并生成该项目。
我创建了一个爬虫来存储像 American Eagle 这样的网站上的所有目录。但是,在响应中,只有所有目录的一个子集可用。
我 运行 scrapy shell 有:'scrapy shell "https://www.ae.com/web/browse/category.jsp?catId=cat10025&navdetail=mega:men:c2:p1" '
然后我 select 适当的 class 通过 'res = response.css('#facetResults').css('.sProd')'
len(res) ~ 20。但是,如果我们快速访问 MEN/Tops/ 的 american eagle 网页,您会看到有远远超过 20 项可用。
我已经尝试更改 css select 或者但是没有成功.. 请帮助谢谢! :)
如果将浏览器开发工具中的 HTML 代码与原始源代码进行比较,您会发现浏览器 HTML 控制台显示了所有项目,而原始代码仅显示 20其中
所有目录信息都存储在一个名为 category_json
的 JS 变量中,它始终存在于正文中,无需与页面交互。
我建议您检索该变量并从中提取信息,我使用 scrapy shell:
对该代码进行了一些测试In [1]: import re, json
In [2]: data_json = re.search('category_json = ({.*})', response.body).group(1)
In [3]: data = json.loads(data_json)
In [4]: products = data['availablePrds'].keys()
In [5]: data['availablePrds'][products[0]]
Out[5]:
{u'availableColorIds': [],
u'brandName': u'AEO',
u'bundleCatId': u'',
u'classId': u'0164',
u'colorImageSelectionData': {u'100': {u'colorNam
u'colorPrdId': u'0164_3898_100',
u'factoryExclusive': False,
u'greatGift': False,
u'imgViews': [u'_f', u'_b'],
u'isAvailable': True,
u'newArrival': True,
u'webExclusive': False}},
u'contextRoot': u'web',
u'defaultURL': u'/browse/product_details.jsp',
u'firstAvailableColorPrdId': u'0164_3898_100',
u'hasBundle': False,
u'isAvailable': False,
u'isClearance': False,
u'isGWP': False,
u'isHazMat': False,
u'listPrice': u'\u20ac22.36 EUR',
u'marketingMessage': u'Buy One Get One 50% Off',
u'prdId': u'0164_3898',
u'prdName': u'AEO NYC Graphic T-Shirt',
u'rating': u'',
u'salePrice': u'\u20ac22.36 EUR',
u'styleId': u'3898'}
如果您遍历该变量,您可以检索每个产品所需的所有信息并生成该项目。