【python--爬虫】利用requests进行百度文库爬虫

导读

很高兴各位读者能够前来观看本帖,本次演示所用的python版本为3.7.2,需要预先安装好的python库有requests库和带有etree的lxml库(据说新版没有)

目录

  1. 网页分析
  2. 代码演示
  3. 结束语

1.网页分析

首先打开百度文库首页 https://wenku.baidu.com
在这里插入图片描述随便点击进入一片帖子
在这里插入图片描述
(实验所用帖子链接:https://wenku.baidu.com/view/e77975cdb8f3f90f76c66137ee06eff9aef849c0.html)
在空白的地方单击右键:查看源代码,看到如下画面,这个就是网页的源代码了在这里插入图片描述在观察页面信息,发现 没有看到我们在文库中看到的内容,初步怀疑网页是通过异步加载的。并在其中的第363行发现异常,在这里插入图片描述在这里插入图片描述查看这行内容发现有两个关键字:
pageLoadUrl:感觉像是描述接下来的url时用于加载页面的,
wkbjcloudbos.bdimg.com :感觉像是加载页面的url的域名
前去验证:现在返回打开的帖子
进入后按F12进入开发者视图在按F5刷新网页,并且点击网络在这里插入图片描述在过滤url输入框中输入我们之前怀疑的域名
wkbjcloudbos.bdimg.com
在这里插入图片描述看到了三个可以的请求,类型为octet-stre… ,打开百度搜索,说是一种以数据流形式下载的文件,
在这里插入图片描述那就验证下,右键第一个请求-----在新标签页打开
在这里插入图片描述点击确定
在这里插入图片描述提示:语法错误:json.parse:json数据的第1行第1列出现意外字符,点击:原始数据
在这里插入图片描述看到了有unicode 编码的数据,复制下载在Python中打开
(复制的内容:
\u5e74\u666e\u901a\u9ad8\u7b49\u5b66\u6821\u62db\u751f\u5168\u56fd\u7edf\u4e00\u8003\u8bd5)
在这里插入图片描述返回文库文章查看有没有出现
在这里插入图片描述发现在文章中出现了
(经过多次验证发现都出现了,由于篇幅问题,这里就不演示了)

2.代码演示

import requests
from lxml import etree
import re
def get_text(url):
    #设置函数用于保存代码
    page_url = url
    #获取页面网址
    page_headers ={
        "User-Agent": "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true",
        "Referer": "https://wk.baidu.com/?pcf=2",
        "Accept-Encoding":"gzip, deflate, br",
        }
    #获取页面headers
    html_code  = requests.get(url=page_url,headers=page_headers)
    #发起一个向变量page_url,存放的url发起一个requests.get请求,
    #请求头使用我们预先设置的page_headers,并将网页的返回内容存放到变量html_code中
    html_code.encoding = "gb2312"
    #转换网页编码为gb2312    
    html_etree = etree.HTML(html_code.text)
    #将网页内容转换为Element对象,并存放到变量 html_etree中
    info = html_etree.xpath('//script[@type="text/javascript"]/text()')
    #从利用xpath网页转换的Element对象中提取名为script,且text属性为text/javascript
    #的标签下的文本内容
    find_need_infos_reg = re.compile('WkInfo.htmlUrls(.*)WkInfo.verify_user_info')
    find_need_infos = find_need_infos_reg.search(str(info))
    need_infos =  (find_need_infos.group().strip("WkInfo.htmlUrls = ").strip(r";\n        WkInfo.verify_user_i").replace(r"\\x22","").replace(r"\\\\\\/","\\").replace("'",'"'))
    #通过正则提取除需要的信息
    url_find_reg = re.compile(r'pageLoadUrl:(.+?)}')
    url_lists = url_find_reg.findall(need_infos)
    #提取出url
    for info_url in url_lists:
        info_url = info_url.replace("\\","/")
        text_html = requests.get(url=info_url,headers=page_headers)
        text_find_reg = re.compile(r',{"c":(.*?),')
        text_lists = text_find_reg.findall(text_html.text)
        #提取出内容
        for text in text_lists:
            try:
                print (eval(text),end="")
                #尝试打印代码
            except:
                pass   

get_text(input("请输入url:"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值