我为亚马逊编写了一个函数,通过给定一个 URL,它可以为我提供产品的名称、价格和评级。如果我给它一个字符串格式的 URL,这会很好地工作。我想使用这个函数,比如说它叫做 AmazonCrawler
,以便从网站上抓取整个产品类别,而不仅仅是单个产品。我该怎么做?
编辑:
这是我想抓取的示例页面:Amazon TV Category。如果我查看页面源代码,我会发现:
<script type='text/javascript'>var ue_t0=ue_t0||+new Date();</script>
<!-- sp:feature:cs-optimization -->
<meta http-equiv='x-dns-prefetch-control' content='on'>
<link rel="dns-prefetch" href="https://images-eu.ssl-images-amazon.com">
<link rel="dns-prefetch" href="https://m.media-amazon.com">
<link rel="dns-prefetch" href="https://completion.amazon.com">
<script type='text/javascript'>
window.ue_ihb = (window.ue_ihb || window.ueinit || 0) + 1;
if (window.ue_ihb === 1) {
我对在亚马逊网站上查找所有智能电视的所有 URL 的方法感兴趣。是否有自动执行此操作的方法?
答案 0 :(得分:2)
如果您使用谷歌检查器,您会发现图片上的 href 指向您想要的网址。例如,您找到的第一台 Samsum 电视在以下 Xpath 中具有其 href:
/html/body/div[1]/div[2]/div[2]/div[1]/div[3]/div[2]/div[2]/ul/li[1]/span/div/a
从这里你需要找到一种概括搜索的方法
答案 1 :(得分:0)
您需要一个选择器,它以 src 结尾的所有 img 为目标,但还需要排除一些其他早期匹配项。使用 :not
和前面的 .a-row
可以做到这一点。最后,您需要使用 set 来清理独特的项目。
import requests
from bs4 import BeautifulSoup as bs
from pprint import pprint
r = requests.get('https://www.amazon.es/b/ref=sv_ap_arrow_ce_4_1_1_1?node=934359031', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')
images = set(i['src'] for i in soup.select('.a-row img[src$=jpg]:not(.bxc-grid__row:nth-child(1) img[src$=jpg])'))
pprint(images)