• 01_Python爬蟲入門遇到的坑__反爬蟲策略01


    1. 爬取京東商品頁面:

    我們現在要爬取這個商品的頁面的詳細信息:【今日必抢 GFI联名版】原装直邮 高端定制 2020夏季新款手工时尚休闲鞋 绿色-定制款 41-标准运动鞋码

    要求:

    1. 只需要拿到原始代碼就可以了,不用獲得商品的具體信息

     我們直接看代碼:

    import requests
    
    # 需要爬取的商品頁面
    url = "https://item.jd.com/68001860009.html"
    
    try:
        # 請求頁面
        r = requests.get(url)
        # 判斷狀態碼, 如果連接狀態不正確, 會自動拋出異常
        r.raise_for_status()
        # 使用備用編碼集
        r.encoding = r.apparent_encoding
        # 查看獲取的源碼
        print(r.text)
    except:
        # 爬取失敗
        print('頁面獲取失敗')

    如果不出所料你會得到下面的結果:

    <script>window.location.href='https://passport.jd.com/uc/login?ReturnUrl=http://item.jd.com/68001860009.html'</script>

    這個的意思也就是說這個頁面使用了反爬蟲技術,禁止機器人訪問.所以你可以模擬瀏覽器提交請求,你只需要添加一點點代碼.

    import requests
    
    # 需要爬取的商品頁面
    url = "https://item.jd.com/68001860009.html"
    '''
    使用帶headers的請求,
    head中的User-Agent表示請求的對象,Mozilla/5.0是一個標準的瀏覽器請求
    後面的則是表示平台和使用的瀏覽器版本
    '''
    head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}
    try:
    
        # 請求頁面
        r = requests.get(url, headers = head)
        # 判斷狀態碼, 如果連接狀態不正確, 會自動拋出異常
        r.raise_for_status()
        # 使用備用編碼集
        r.encoding = r.apparent_encoding
        # 查看獲取的源碼
        print(r.text)
    except:
        # 爬取失敗
        print('頁面獲取失敗')

    ps: 查看自己提交的信息:

    import requests
    
    url = "https://item.jd.com/68001860009.html"
    
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
    }
    # 默認訪問方式
    r1 = requests.get(url)
    # 查看提交的url
    print(r1.request.url)
    # 查看請求的headers
    print(r1.request.headers)
    
    # 加上headers之後訪問
    r2 = requests.get(url, headers=head)
    print(r2.request.url)
    print(r2.request.headers)

    你會得到如下結果:

    https://item.jd.com/68001860009.html
    {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
    https://item.jd.com/68001860009.html
    {'User-Agent': 'Mozilla/5.0xa0(Windowsxa0NTxa010.0;xa0Win64;xa0x64)xa0AppleWebKit/537.36xa0(KHTML,xa0likexa0Gecko)xa0Chrome/80.0.3987.149xa0Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

    由此我們可以看出當使用默認的請求的時候我們所提交的請求之中User-Agent是 python-requests/2.22.0,也就是說,如果使用默認的訪問方式,我們等同於直接告訴網站我是個機器人,你快來攔截我好嗎.

    總結:很多網站都設有反爬蟲,使用headers能很好的偽裝自己

  • 相关阅读:
    VSTS For Testers读书笔记(20)
    VSTS For Testers读书笔记(16)
    VSTS For Testers读书笔记(18)
    SQL Delta数据库对比工具
    浦东海洋水族馆之行
    [ZZ]买易通与YY搜索宣布进行整合
    Web Service测试工具小汇
    给图片添加水印
    去除A和B数组中的交集
    EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/12866576.html
Copyright © 2020-2023  润新知