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('
  • '
    ,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">(.*?)
    ',html_post.text,re.S) for each in title: print(each)

    参考:
    1.Python3 urllib模块的使用;
    2.Requests快速上手;
    3.Requests高级用法;
    4.编码gbk错误问题
    5.Requests获取网页源码

    你可能感兴趣的:(python,python3.5爬虫)