爬取简单反爬虫网站实战

实战一,爬取京东商品


import requests

url = "https://item.jd.com/27217068296.html"

try:
    r = requests.get(url)
    r.raise_for_status()    #获取爬取失败异常
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")

结果:

1092957-20181020010650826-1588458475.png

实战二,爬取亚马逊


  • URL更为复杂
  • 有一定的反爬虫措施
import requests

url = "https://www.amazon.cn/dp/B07746N2J9/459-3461623-5096824?_encoding=UTF8&pf_rd_i=desktop&pf_rd_m=A1AJ19PSB66TGU&pf_rd_p=64065c3b-d3b2-4b04-b0ae-f565f28d2a3e&pf_rd_r=7W3EH45JP9MRMY040XR2&pf_rd_s=Tcg-slide-1&pf_rd_t=36701&ref_=p-Tcg-slide-1--cb755e89-28c8-4498-81e4-3ff3328e7310"

try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失败")

结果:

1092957-20181020010723921-1436901989.png

  • 检查状态编码和返回的信息:

1092957-20181020010809931-232636637.png

  • 可以从服务器获得信息,说明不是网络的问题。可能是亚马逊对网络爬虫加以限制,所以我们来查看我们给亚马逊服务器发送请求的头部信息:
  • 请注意,服务器返回给我们的头部信息用r.headers查看,查看我们给服务器请求的头部信息要用r.request.headers来查看:

1092957-20181020010839474-611919680.png

  • 找到了问题所在,原来我们的程序很诚实的告诉了亚马逊服务器,我是一个python requests程序产生的访问,所以被拒绝。
  • 所以我们要让我们的程序模仿浏览器的访问。没错,我们要用到可选字段中的headers

1092957-20181020010902044-1759954807.png

  • 查看我们给服务器请求的头部信息:

1092957-20181020010923738-1184346705.png

  • 查看返回的网页信息:

1092957-20181020010946138-680950639.png

  • 贴出全部代码:
import requests

url = "https://www.amazon.cn/dp/B07746N2J9/459-3461623-5096824?_encoding=UTF8&pf_rd_i=desktop&pf_rd_m=A1AJ19PSB66TGU&pf_rd_p=64065c3b-d3b2-4b04-b0ae-f565f28d2a3e&pf_rd_r=7W3EH45JP9MRMY040XR2&pf_rd_s=Tcg-slide-1&pf_rd_t=36701&ref_=p-Tcg-slide-1--cb755e89-28c8-4498-81e4-3ff3328e7310"
kv = { 'user-agent' : 'Mozilla/5.0' }

try:
    r = requests.get(url,headers = kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:3000])
except:
    print("爬取失败")

转载于:https://www.cnblogs.com/031602523liu/p/9820088.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值