Python中爬取网页的几种方法

爬虫是Python语言最基本的用法之一,爬虫的前提就是数据请求,数据请求方法就urlopen和requests这两种比较常用,而两种方法大同小异,具体我们通过代码来看看

 

urlopen方法

urlopen分为两种情况:

一:请求网址中没有中文

from urllib.request import Request,urlopen
def url_urlopen(self):
        url='https://blog.csdn.net/'
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
        }
        request=Request(url,headers=headers)
        response=urlopen(request)
        code=response.read().decode()
        print(code)

二:请求网址中有中文,需要对网址进行解析

from urllib.request import Request,urlopen
from urllib.parse import quote
import string
def url_urlopen(self):
    url='https://www.sojson.com/open/api/weather/xml.shtml?city=郑州'
    response=urlopen(quote(url,safe=string.printable))
    code=response.read().decode()
    print(code)

 

requests方法

request方法没有对网址的要求,相对于urlopen比较简单

import requests
def url_requests(cls):
    url='https://blog.csdn.net/'
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
        }
    code=requests.get(url,headers=headers).content.decode()
    print(code)

 

请求方法进阶

上面这两种方法不支持修改ip,获取cookie,验证代理等内容

如果要使用这些内容,需要使用build_opener来进行处理

 

(1)修改IP

1.导入相关第三方库

import random
from urllib.request import Request,urlopen,ProxyHandler,bulid_opener

 2.准备一些IP(注意域名),并设置headers

ip_list=[
    '255.255.255.99:99',
    '255.255.254.99:99',
    '255.255.253.99:99',
    '255.255.252.99:99',
]
headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
        }

3.请求网址并随机一个ip

            如果域名是http,则key值为http

            如果域名是https,则key值为https

proxy={ 'http':random.choice(ip_list)}
request=Request('http://www.baidu.com',headers=headers)

 4.利用build_operner来使用替换ip(重点)

proxy_handler=ProxyHandler(proxy)
opener=build_opener(proxy_handler)
response=opener.open(request)

code=response.read().decode()
print(code)

 

(2)获取cookie

1.导入相关第三方库

from http.cookiejar import CookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener

2.创建一个管理cookie的对象并使用获取到的cookie进行访问

cookie_obj=CookieJar()
cookie_handler=HTTPCookieProcessor(cookie_obj)
opener=build_opener(cookie_handler)

response=opener.open('http://www.neihanshequ.com')
code=response.read().decode()
print(code)

关于数据请求就说到这里吧,学会后爬取静态数据基本上没什么问题了,爬取动态数据之后再说

posted @ 2018-08-23 22:38  小火火火  阅读(988)  评论(0)    收藏  举报