zoukankan      html  css  js  c++  java
  • 【Python成长之路】Python爬虫 --requests库爬取网站乱码(xe4xb8xb0xe5xa)的解决方法【华为云分享】

    【写在前面】

    在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(xe4xb8xb0xe5xafx8cxe7x9),如下图所示:

    网上 查找了一些方法,以为是遇到了网站加密处理。后来发现 通过F12还 是能获取网页的元素,那么有什么办法能规避乱码问题呢?答案是:用selenium.

    【效果如下】

    【示例代码】

    # coding=utf-8
    # @Auther : "鹏哥贼优秀"
    # @Date : 2019/10/16
    # @Software : PyCharm
    
    from selenium import webdriver
    
    url = 'https://blog.csdn.net/yuzipeng'
    driver = webdriver.Chrome("F:\Python成长之路\chromedriver.exe")
    driver.get(url)
    urls = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]')
    blogurl = ['https://blog.csdn.net/yuzipeng/article/details/' + url.get_attribute('data-articleid') for url in urls]
    titles = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]/h4/a')
    blogtitle = [title.text for title in titles]
    myblog = {k:v for k,v in zip(blogtitle,blogurl)}
    for k,v in myblog.items():
        print(k,v)
    driver.close()

    【知识点】

    1、selenium使用

    基本的selenium安装方法、使用方法(如查找元素的各类函数)可以详见之前的博客《【Python成长之路】从零学爬虫--给微信公众号阅读量作个弊:刷阅读量》

    (https://blog.csdn.net/yuzipeng/article/details/100179696)

    2、推导式使用

    (1)列表推导式:[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

        类似这样就可以实现将for循环的多行程序浓缩到一句代码 中,如

    blogtitle = [title.text for title in titles]

    而如果用for循环写,则需要这样:

    blogtitle = []
    for title in titles:
        blogtitle.append(title)

    (2)字典推导式:{ key表达式: value表达式 for value in collection if condition }

    这样的写法,一般用于key和value能相互转换;但是如果key和value是完全不同的列表,那就需要用zip对key/value进行整合。

    myblog = {k:v for k,v in zip(blogtitle,blogurl)}

    如果对zip函数不熟悉,可以用下面的例子来 介绍下。

    a = ['a', 'b', 'c']
    b = [1, 2, 3]
    c = {k: v for k, v in zip(a, b)}
    print(c)
     
    结果是:{'a': 1, 'b': 2, 'c': 3}

    作者:鹏哥贼优秀

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165249.html
Copyright © 2011-2022 走看看