热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1、直接获取.read()requests.get()1.1输出Unicode格式importurllib.requestrequesturllib.request.Reque

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


    推荐阅读
    author-avatar
    张群羽圣文
    这个家伙很懒,什么也没留下!
    Tags | 热门标签
    RankList | 热门文章
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有