Python-urllib

urllib提供了一系列用于操作URL的功能。

Get

context = ssl._create_unverified_context()  # 解决加载https问题
response = urllib.request.urlopen('https://bbs.csdn.net/topics/390978001', context=context)
read = response.read()  # 读出来的是二进制
decode = read.decode('utf-8')  # 解码
print(decode)
print('code = ', response.getcode())  # 状态码
print('url = ', response.geturl())  # 获取请求的url
print('info = ', response.info())  # 请求头

Post+添加Head

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

data = {
    "type": "AUTO",
    "i": 'Hello',
    "doctype": "json",
    "xmlVersion": "1.8",
    "keyfrom": "fanyi.web",
    "ue": "UTF-8",
    "action": "FY_BY_CLICKBUTTON",
    "typoResult": "true"
}
head = {
    'User-Agent': user_agent
}

data = urllib.parse.urlencode(data).encode('utf-8')  # urllib.parse.urlencode encode都是必须的

# 带有data的是post请求
# 不添加header
# response = urllib.request.urlopen(url, data)

# 添加header的两种方法
# 1.
# request = urllib.request.Request(url, data,head)
# 2.
request = urllib.request.Request(url, data)
request.add_header('User-Agent', user_agent)

response = urllib.request.urlopen(request)

html = response.read().decode('utf-8')
j = json.loads(html)  # 解析成json数据
print(html)

代理

user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

url = 'http://ip.tool.chinaz.com/'

# 代理ip可能失效,不能用
iplist = ['116.204.152.110:8080', '110.86.136.118:9999', '163.204.240.241:9999', '59.57.148.242:9999']
# 创建代理
# 1.参数是一个字典{'类型':'代理ip:端口号'}
proxy_support = urllib.request.ProxyHandler({'http': random.choice(iplist)})
# 2.定制、创建一个opener
opener = urllib.request.build_opener(proxy_support)

# opener.addheaders = [('User-Agent', user_agent)]
# 3.安装opener
urllib.request.install_opener(opener)

response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
print(html)

下载图片

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read()
    return html


def get_page(url):
    html = url_open(url).decode('utf-8')
    a = html.find('current-comment-page') + 23  # 找到页数第一个数字的位置
    b = html.find(']', a)  # 找到页数的最后一个数字的位置
    c = html[a:b]  # 切割,获取最新页数
    return c


def find_imgs(url):
    html = url_open(url).decode('utf-8')
    a = html.find('img src=')
    img_addrs = []

    while a != -1:
        b = html.find('.jpg', a, a + 255)  # a+255 限制查找范围
        if b != -1:
            img_addrs.append(html[a + 9:b + 4])
        else:
            b = a + 9  # 查找下个 'img src='

        a = html.find('img src=', b)

    return img_addrs


def save_img(img_addrs):
    for img in img_addrs:
        img_name = img.split('/')[-1]  # 分割反斜杠,获取最后一个
        with open(img_name, 'wb') as f:
            img_url = 'http:' + img  # 拼接成标准链接
            print(img_url)
            img_byte = url_open(img_url)  # 读取图片字节流
            f.write(img_byte)  # 写入,保存图片


def download_mm(folder='OOXX', pages=3):
    if not os.path.exists(folder):
        os.makedirs(folder)  # 创建文件夹

    # 查看当前工作目录
    retval = os.getcwd()
    print("当前工作目录为 %s" % retval)

    os.chdir(folder)  # path -- 要切换到的新路径。

    # 查看修改后的工作目录
    retval = os.getcwd()
    print("目录修改成功 %s" % retval)

    url = 'http://jandan.net/ooxx/'

    page_num = int(get_page(url))
    print('page_num:', page_num)
    for i in range(pages):
        if page_num == 0:
            break
        page_url = url + 'page-' + str(page_num - i) + '#comments'
        print(page_url)
        img_addrs = find_imgs(page_url)
        save_img(img_addrs)


if __name__ == '__main__':
    download_mm()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • urllib是python自带的一个包,主要用于做爬虫的(暂时接触到的是这样)。爬虫也叫网络蜘蛛,主要功能是获取网...
    _Clown_阅读 1,124评论 0 1
  • 爬网站数据 使用request获取Python主页内容: 两行代码轻松拿到网页源码 使用print(type(re...
    Labradors阅读 2,696评论 0 3
  • urllib是Python中内置的发送网络请求的一个库(包),在Python2中由urllib和urllib2两个...
    Root_123阅读 202评论 0 0
  • 01 她应该算是一个飞扬跋扈的女孩子。短发,二十多岁了还戴着牙套,皮肤白净而透亮,五官小巧而精致,典型的南方女子的...
    伍月小姐阅读 804评论 5 14
  • 时间成本 今天开心的时候,我感觉我又是一个正常人了,哈哈哈哈, 往后呀,购物不能用太多时间
    文华ya阅读 191评论 0 0