如何自动化查询TESCO商品信息

82 篇文章 0 订阅
69 篇文章 0 订阅

亿牛云代理
Tesco是全球三大零售企业之一,成立于1932年,是英国最大的零售公司之一,也是世界三大零售商之一。可以在它的网站https://www.tesco.com/查询食品、饮料、家居用品、电器、玩具等商品。如果需要定期获取商品信息,可以使用爬虫程序进行采集。但是直接访问链接获取会被网站拒绝响应,因此需要进行如下优化:
1、User-Agent随机设置
因为User-Agent是请求头的一部分,它包含了浏览器的信息,如浏览器类型、版本、操作系统等。如果每次请求都使用相同的User-Agent,那么网站很容易识别出这是一个爬虫程序,从而采取反爬虫措施。通过使用多个User-Agent随机调用的方式,可以避免一个请求头长时间访问。
2、获取重定向URL
在不发送 cookie 的情况下查看 from:htmlrequests.get

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="refresh" content="5; URL='/groceries/hu-HU/shop/alkohol/sor-cider/all?bm-verify=AAQAAAAH_...

可以看到有一个正在将您的浏览器重定向到其中包含的URL http-equiv=“refresh"content=”…",可以提取 URL 并跟踪重定向。
3、使用爬虫代理IP
代理IP是指通过第三方服务器的IP地址,用来隐藏爬虫服务器真实的IP地址,从而达到匿名访问网站的目的。使用代理IP可以避免被网站封禁IP,从而保证爬虫程序的正常运行。
结合上述的优化策略,提供相应的demo如下:

import requests
from scrapy import Selector
import random
import base64

#亿牛云(动态转发隧道代理)
# 爬虫代理加强版 代理服务器
proxyHost = "www.16yun.cn"
proxyPort = "31111"

# 爬虫代理加强版 代理验证信息
proxyUser = "16YUN"
proxyPass = "16IP"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host" : proxyHost,
    "port" : proxyPort,
    "user" : proxyUser,
    "pass" : proxyPass,
}

# 设置 http和https访问都是用HTTP代理
proxies = {
    "http"  : proxyMeta,
    "https" : proxyMeta,
}

user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    # 添加更多的User-Agent值
]

headers = {
    'User-Agent': random.choice(user_agents),  # 随机选择一个User-Agent值  
}

site = 'https://bevasarlas.tesco.hu'
page_url = site + '/groceries/hu-HU/shop/alkohol/sor-cider/all'

html = requests.get(page_url, proxies=proxies, headers=headers)
sel = Selector(text=html)

# 从`content`属性提取URL
href = sel.xpath('//meta[@http-equiv]/@content').get().split('=', maxsplit=1)[1].strip('\'')

# 跟随重定向
html = requests.get(url=site + href,proxies=proxies, headers=headers)
sel = Selector(text=html)

scraped_data = sel.xpath('//li[contains(@class, "product-list--list-item")]')
card = scraped_data[0]
name = card.xpath('.//span[@class="styled__Text-sc-1xbujuz-1 ldbwMG beans-link__text"]/text()').extract()
print(name)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值