python3爬虫(1)--简单网页源代码获取

1、直接获取 .read()/requests.get()

1.1 输出Unicode格式

import urllib.request
request=urllib.request.Request('http://www.baidu.com')
response=urllib.request.urlopen(request)
html=response.read()
print(html)

输出是Unicode格式

>>> print(dir(urllib))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__path__', '__spec__']

urllib 的功能:

>>> help(urllib)
Help on package urllib:

NAME
    urllib

PACKAGE CONTENTS
    error
    parse
    request
    response
    robotparser

1.2 为了显示中文,更改了输出格式

import urllib.request
import io  
import sys  

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码  

request=urllib.request.Request('http://www.baidu.com')

response=urllib.request.urlopen(request)
html=response.read()

print(html.decode('utf-8'))

这里边,把utf标准输出转化为gb18030,详细见 参考4。

问题:

1.爬http://www.baidu.com和爬https://www.baidu.com 得到的内容不同;
2.爬http://www.baidu.com得到的内容和直接用浏览器看源代码的内容不同,感觉直接用python爬,内容缺少。

1.3采用requests.get()

import requests  
import io  
import sys  

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码  
html = requests.get('http://www.baidu.com')  
html.encoding = 'utf-8' #这一行是将编码转为utf-8否则中文会显示乱码。  
print(html.text)

1.4采用修改http 的requests.get()

import requests  
import re  
import io
from imp import reload
#下面三行是编码转换的功能  
import sys  
reload(sys)  

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码   
#hea是我们自己构造的一个字典,里面保存了user-agent。  
#让目标网站误以为本程序是浏览器,并非爬虫。  
#从网站的Requests Header中获取。【审查元素】  
hea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}  
  
html = requests.get('http://www.baidu.com/',headers = hea)  
  
html.encoding = 'utf-8' #这一行是将编码转为utf-8否则中文会显示乱码。  
print(html.text)

2.带正则表达式的提取

import requests
import re
import io
#下面三行是编码转换的功能
import sys
from imp import reload
reload(sys)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码   

#hea是我们自己构造的一个字典,里面保存了user-agent。
#让目标网站误以为本程序是浏览器,并非爬虫。
#从网站的Requests Header中获取。【审查元素】
hea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}

html = requests.get('http://www.douban.com/',headers = hea)

html.encoding = 'utf-8' #这一行是将编码转为utf-8否则中文会显示乱码。

#此为正则表达式部分。找到规律,利用正则,内容就可以出来
title = re.findall('<li><a href=(.*?)</a></li>',html.text,re.S)
for each in title: 
    print(each)

知识点:

1.from imp import reload
2.sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码   

3.requests.post()表单提交法

#-*-coding:utf8-*-  
import requests  
import re  
  
#需要使用Chrome浏览器中的:审查元素->Network  
#很多信息,如url、page、提交方法等都必须从里得到  
  
#原来的目标网址,但不能作为目标url  
# url = 'https://www.crowdfunder.com/browse/deals'  
  
#Post表单向此链接提交数据  
url = 'https://www.crowdfunder.com/browse/deals&template=false'  
  
#get方法比较  
# html = requests.get(url).text  
# print html  
  
  
#注意这里的page后面跟的数字需要放到引号里面。  
#page的数据可以改动  
data = {  
    'entities_only':'true',  
    'page':'2'  
}  
  
html_post = requests.post(url,data=data)  
title = re.findall('"card-title">(.*?)</div>',html_post.text,re.S)  
for each in title:  
    print(each)

参考:

  1. Python3 urllib模块的使用
  2. Requests快速上手
  3. Requests高级用法
  4. 编码gbk错误问题;
  5. Requests获取网页源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rosefunR

你的赞赏是我创作的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值