21天打造分布式爬虫-urllib库(一)

1.1.urlopen函数的用法

#encoding:utf-8

from urllib import request

res = request.urlopen("https://www.cnblogs.com/")

print(res.readlines())

#urlopen的参数
#def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
#            *, cafile=None, capath=None, cadefault=False, context=None):

1.2.urlretrieve函数

将网页上的文件保存到本地

#coding:utf-8

from urllib import request

res = request.urlretrieve("https://www.cnblogs.com/",‘cnblog.html‘)

#urlretrieve参数
#def urlretrieve(url, filename=None, reporthook=None, data=None):

1.3.参数编码和解码函数

urlencode函数用于编码中文和特殊字符

#urlencode函数

# 简单用法
#from urllib import parse
# data = {‘name‘:‘德瑞克‘,‘age‘:100}
# qs = parse.urlencode(data)
# print(qs)    #name=%E5%BE%B7%E7%91%9E%E5%85%8B&age=100

#实际用例
from urllib import request,parse
url = "http://www.baidu.com/s"
params = {"wd":"博客园"}
qs = parse.urlencode(params)
url = url + "?" + qs
res = request.urlopen(url)
print(res.read())

parse_qs函数用于将经过编码后的url参数进行解码。

from urllib import parse

qs = "name=%E5%BE%B7%E7%91%9E%E5%85%8B&age=100"
print(parse.parse_qs(qs))   #{‘name‘: [‘德瑞克‘], ‘age‘: [‘100‘]}

1.4.urlparse和urlsplit函数用法

urlparse和urlsplit都是用来对url的各个组成部分进行分割的,唯一不同的是urlsplit没有"params"这个属性.

from urllib import request,parse

url = "https://www.baidu.com/s?wd=cnblog#2"
result = parse.urlparse(url)
print(result)
#ParseResult(scheme=‘https‘, netloc=‘www.baidu.com‘, path=‘/s‘, params=‘‘, query=‘wd=cnblog‘, fragment=‘2‘)

print(‘scheme:‘,result.scheme)   #协议
print(‘netloc:‘,result.netloc)   #域名
print(‘path:‘,result.path)       #路径
print(‘query:‘,result.query)     #查询参数

#结果
#scheme: https
# netloc: www.baidu.com
# path: /s
# query: wd=cnblog

 1.5.Request爬去拉勾网职位信息

Request类的参数

class Request:

    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

爬去拉钩网职位信息

拉勾网的职位信息是在Ajax.json里面

代码:

#利用Request类爬去拉勾网职位信息

from urllib import request,parse

url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"

#请求头
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36",
    "Referer":"https://www.lagou.com/jobs/list_python?city=%E5%8C%97%E4%BA%AC&cl=false&fromSearch=true&labelWords=&suginput="
}
#post请求需要提交的数据
data = {
    ‘first‘:‘true‘,
    ‘pn‘:1,
    ‘kd‘:‘python‘
}
#post请求的data数据必须是编码后的字节类型
req = request.Request(url,headers=headers,data=parse.urlencode(data).encode(‘utf-8‘),method=‘POST‘)   #建立一个请求对象
res = request.urlopen(req)
#获取的信息是字节类型,需要解码
print(res.read().decode(‘utf-8‘))

1.6.ProxyHandler代理

代理原理:在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,获取到数据后,再返回给我们。

#代理的使用
from urllib import request

url = "https://www.baidu.com/s?wd=cnblog"

#1.使用ProxyHandler传入代理构建一个handler
# handler = request.ProxyHandler({‘http‘:‘115.210.31.236.55:9000‘})
handler = request.ProxyHandler({‘http‘:‘115.210.31.236.55:9000‘})
#2.使用创建的handler构建一个opener
opener = request.build_opener(handler)
#3.使用opener去发送一个请求
res = opener.open(url)
print(res.read())

原文地址:https://www.cnblogs.com/gaidy/p/12095892.html

时间: 2024-10-09 17:47:40

21天打造分布式爬虫-urllib库(一)的相关文章

21天打造分布式爬虫(一)

1.1.urlopen函数的用法 #encoding:utf-8 from urllib import request res = request.urlopen("https://www.cnblogs.com/") print(res.readlines()) #urlopen的参数 #def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, # *, cafile=None, capath=None,

21天打造分布式爬虫-房天下全国658城市房源(十一)

项目:爬取房天下网站全国所有城市的新房和二手房信息 网站url分析 1.获取所有城市url http://www.fang.com/SoufunFamily.htm 例如:http://cq.fang.com/ 2.新房url http://newhouse.sh.fang.com/house/s/ 3.二手房url http://esf.sh.fang.com/ 4.北京新房和二手房url规则不同 http://newhouse.fang.com/house/s/ http://esf.fan

21天打造分布式爬虫-数据解析实战(三)

3.1.豆瓣电影 使用lxml import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36', 'Referer':'https://movie.douban.com/' } url = 'https

21天打造分布式爬虫-中国天气网实战(四)

4.1.中国天气网 网址:http://www.weather.com.cn/textFC/hb.shtml 解析:BeautifulSoup4 爬取所有城市的最低天气 import requests from bs4 import BeautifulSoup import html5lib def parse_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/53

21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)

6.1.爬取第一页的职位信息 第一页职位信息 from selenium import webdriver from lxml import etree import re import time class LagouSpider(object): def __init__(self): self.driver = webdriver.Chrome() #python职位 self.url = 'https://www.lagou.com/jobs/list_python?labelWords

21天打造分布式爬虫-Crawl爬取小程序社区(八)

8.1.Crawl的用法实战 新建项目 scrapy startproject wxapp scrapy genspider -t crawl wxapp_spider "wxapp-union.com" wxapp_spider.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider,

Python爬虫--Urllib库

Urllib库 Urllib是python内置的HTTP请求库,包括以下模块:urllib.request (请求模块).urllib.error( 异常处理模块).urllib.parse (url解析模块).urllib.robotparser (robots.txt解析模块) 一.urllib.request 请求模块 1.urllib.request.urlopen urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=N

python爬虫 urllib库基本使用

以下内容均为python3.6.*代码 学习爬虫,首先有学会使用urllib库,这个库可以方便的使我们解析网页的内容,本篇讲一下它的基本用法 解析网页 #导入urllib from urllib import request # 明确url base_url = 'http://www.baidu.com/' # 发起一个http请求,返回一个类文件对象 response = request.urlopen(base_url) # 获取网页内容 html = response.read().de

python爬虫---urllib库的基本用法

urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块: urllib.request   请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparse    robots.txt解析模块 下面是一些urllib库的使用方法. 使用urllib.request import urllib.request response = urllib.request.urlopen(