requests.get(url) 与实际加载网页的元素不一致的解决方式

这个小任务的目的主要是想命令行输入关键字然后自动打开前几位的google 搜索网页(简单版本的feeling lucky)。过程中发现requests.get()的页面和browser inspect的HTML元素是有差异的。。。比如我需要爬到的转向链接,即class= "iUh30"这个元素 (如图),用bs4死活找不到...


利用chrome developer tool 去 inspect elements

那这个时候就需要设置好你的header中的UA以及用urllib.request 代替requests. Python3里面urllib2已经划入urllib中,所以直接导入urllib.request, 针对“SSL: CERTIFICATE_VERIFY_FAILED” Error的问题直接import ssl 然后利用gcontext = ssl.SSLContext() 来解决。 代码如下:

#! python3
# opens several google page at once

import urllib.request
import requests, sys, webbrowser
from bs4 import BeautifulSoup
import ssl

print("googling...")

if len(sys.argv) > 1:
    kw = "+".join(sys.argv[1:])
    user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
    link = "https://www.google.com/search?q=" + kw
    print("link:", link)
    headers = {'User-Agent': user_agent}
    try:
        #res = requests.get(link) # 得到的HTML和浏览器直接访问不一致!
        request = urllib.request.Request(url=link, headers=headers)
        gcontext = ssl.SSLContext() # bypass “SSL: CERTIFICATE_VERIFY_FAILED” Error
        html = urllib.request.urlopen(request,context=gcontext).read()

        google_soup = BeautifulSoup(html,"html.parser")
        g_blocks = google_soup.select("cite.iUh30")

        for block in g_blocks:
            target_link = block.get_text()
            #webbrowser.open(target_link) # 直接打开:
            print(target_link)

    except Exception as err:
        print("something wrong:", err)
else:
    print("Please type search keywords as arguments: python3 xx.py keyword")

运行结果:

c18pxxx:Py4e Nick$ python3 webscraping-feelinglucky.py python
googling...
link: http://www.google.com/search?q=python
https://www.python.org/
https://en.wikipedia.org/wiki/Python_(programming_language)
https://sv.wikipedia.org/wiki/Python_(programspråk)
https://www.w3schools.com/python/
https://www.codecademy.com/learn/learn-python
https://www.tutorialspoint.com/python/
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • urllib and urllib2 区别 –博主提示:下面的是python2中的用法,python3需要做出相应...
    sunnyRube阅读 1,490评论 0 1
  • 上一篇:8.Urllib库基本使用下一篇:10.正则表达式基础 requests是python实现的最简单易用的H...
    在努力中阅读 3,624评论 2 11
  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 13,025评论 6 28
  • http header 消息通常被分为4个部分:general header即头部, request header...
    徐薇薇阅读 32,295评论 0 5
  • 十年寒窗,发奋图强,莘莘学子阅兵场。 幼稚儿童,知书达理,科场如同上战场。 语文数学,英语口语,文理分科凭兴趣。 ...
    冲天农锄草阅读 4,774评论 80 216

友情链接更多精彩内容