python3爬虫实战(一):基于requests/urllib.request和BeautifulSoup爬取网站新闻

一、使用requests向浏览器模拟发送请求:

requests模块可以向浏览器模拟发送请求,这里先采用requests模块获取清华大学新闻首页中的所有新闻并使用BeautifulSoup模块解析html文档去除html标签,代码如下:

#requests或urllib.request:向浏览器模拟发送请求
#BeautifulSoup:将html文档转换成树形结构,通俗意思:去除html标签
#selenium:开源web自动化测试软件,通俗意思:与浏览器进行通话,使得浏览器完全按照脚本运行
import requests
from bs4 import BeautifulSoup as bs
def getInfo(url,headers):
    response=requests.get(url,headers=headers)
    response.encoding='utf-8'
    soup=bs(response.text,'html.parser')
    print(soup.text)

if __name__=='__main__':
    url="http://news.tsinghua.edu.cn/publish/thunews/index.html"
    headers={
        'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
    'Referer': r'http://info.tsinghua.edu.cn/',
    'Connection': 'keep-alive'
}
    getInfo(url,headers)

二、使用urllib.request向浏览器模拟发送请求:

urllib.request模块也可以向浏览器模拟发送请求,作用与request模块相同,区别在于urllib.request.urlopen()不支持添加headers头信息,它默认的用户代理(User-Agent)是本级python版本,服务器一下就能识别出它是爬虫,因此我们先使用urllib.request.Request类来添加headers头信息,然后作为参数传给urllib.request.urlopen()获取网页内容,代码如下:

#使用requests或urllib.request向浏览器模拟发送请求
import urllib.request
from bs4 import BeautifulSoup as bs
def getInfo(url,headers):
    #urllib.request.urlopen()不支持添加headers信息,它默认的用户代理是本机python版本,服务器一下就能识别出这是爬虫
    #要想模拟一个真实用户用浏览器去访问网页,在发送请求的时候会有不同的用户代理
    response=urllib.request.Request(url,headers=headers)
    response1=urllib.request.urlopen(response)
    soup=bs(response1.read().decode('utf-8'),'html.parser')
    print(soup.text)
if __name__=='__main__':
    url="http://news.tsinghua.edu.cn/publish/thunews/index.html"
    headers={
        'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
    'Referer': r'http://info.tsinghua.edu.cn/',
    'Connection': 'keep-alive'
}
    getInfo(url,headers)

以上就是requests模块和urllib.request模块两者的区别,从代码中我们可以发现requests模块使用的基本是属性,如requests.encoding,requests.text,二urllib.request.urlopen()使用的基本是方法,如urllib.request.urlopen().read(),urllib.request.urlopen().read().decode()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员对白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值