# Python网络爬虫基础(上) **Repository Path**: pytz/python_web_crawler_foundation_ ## Basic Information - **Project Name**: Python网络爬虫基础(上) - **Description**: Python网络爬虫基础(上) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-27 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python网络爬虫学习笔记整理 Python网络爬虫基础 数据爬去方面: 在爬虫实现上,除了scrapy框架之外,python有许多与此相关的库可供使用。其中,在数据抓取方面包括: urllib2(urllib3)、requests、mechanize、selenium、splinter; 其中,urllib2(urllib3)、requests、mechanize用来获取URL对应的原始响应内容;而selenium、splinter通过加载浏览器驱动,获取浏览器渲染之后的响应内容,模拟程度更高。 考虑效率、当然能使用urllib2(urllib3)、requests、mechanize等解决的尽量不用selenium、splinter,因为后者因需要加载浏览器而导致效率较低。 对于数据抓取,涉及的过程主要是模拟浏览器向服务器发送构造好的http请求,常见类型有:get/post 数据解析方面: 在数据解析方面,相应的库包括:lxml、beautifulsoup4、re、pyquery。 对于数据解析,主要是从响应页面里提取所需的数据,常用方法有:xpath路径表达式、CSS选择器、正则表达式等。 其中,xpath路径表达式、CSS选择器主要用于提取结构化的数据。而正则表达式主要用于提取非结构化的数据。 urllib.request: urllib.request 模块提供了最基本的构造 HTTP 请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容。 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) 参数:url地址 data:可选附加参数,字节流编码格式(bytes() 可转换),请求方式会变为POST timeout (超时时间)单位为秒,若请求超出了设置时间还没有响应,则抛异常 返回HTTPResposne类型的对象: response.read() 就可以得到返回的网页内容,可使用decode("utf-8")解码字符串 response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到 urllib.request.Request: 利用urlopen()方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求。 使用强大的Request类可以在请求中加入需要的headers等信息。 class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None) 第一个参数是请求链接,这个是必传参数,其他的都是可选参数 data 参数如果要传必须传 bytes (字节流)类型的,如果是一个字典,可以先用 urllib.parse.urlencode() 编码。 headers 参数是一个字典,你可以在构造 Request 时通过 headers 参数传递,也可以通过调用 Request 对象的 add_header() 方法来添加请求头。 origin_req_host 指的是请求方的 host 名称或者 IP 地址。 unverifiable 指的是这个请求是否是无法验证的,默认是 False 。意思就是说用户没有足够权限来选择接收这个请求的结果 method 是一个字符串,它用来指示请求使用的方法,比如 GET , POST , PUT 等等。