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展开没有request

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

NAME
    urllib

PACKAGE CONTENTS
    error
    parse
    request
    response
    robotparser

原来要用help

知识点:
1、urllib.request

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

import urllib.request
import io  
import sys  

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

request=urllib.request.Request('http://www.cc98.org/index.asp')

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获取网页源码

    原文作者:rosefun96
    原文地址: https://blog.csdn.net/rosefun96/article/details/78757199
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞