URL:
URL主要有三部分组成:
(1)协议,常见的协议有http,https,ftp,file(访问本地文件夹),ed2k(电驴的专用链接)等等。
(2)存放资源的服务器的域名系统(DNS)主机名或者IP地址(有时候包含端口号,各种传输协议都有默认的端口号)
(3)主机资源的具体地址,如目录和文件名等
注意:
第一部分和第二部分用"://"符号隔开的,
第二部分和第三部分用"/"符号隔开的,
第一部分和第二部分是不可缺少的,第三部分有时候可以省略。
urllib:
爬取网页:
import urllib.request
response = urllib.request.urlopen("http://www.baidu.com")
html = response.read().decode("utf-8")
print(html)
下载一只小猫:
import urllib.request
# req = urllib.request.Request("url")
# response = urllib.request.urlopen(req)
response = urllib.request.urlopen("url")
html = response.read().decode("utf-8")
with open("name.jpg",'wb') as f:
f.write(html)
注意:
(1)urlopen的url参数即可以是一个字符串也可以是一个Request对象,如果你传入是一个字符串,那么Python是会默认帮你
把目标字符转换成Request对象,然后在传入urlopen函数,如上述注释代码所示。
(2)urlopen实际上返回的是一个类文件对象,因此你可以用read()方法来读取内容,他还有以下三个函数会用到。
1.geturl()--返回请求的url
2.info()--返回一个httplib,HTTPMessage对象,包含远程服务器返回的头信息。
3.getcode()--返回HTTP状态码
隐藏身份:
UserAgent:
对于一些服务器来说是不愿意让爬虫进行爬去的,这样服务器的压力就会增加,服务器一般是通过User-Agent来识别 的,普通浏览器会通过该内容向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识。
修改User-Agent:
实例化Request对象的时候将headers参数传进去或者通过add_header()方法往Request对象添加headers,如:
import urllib.request
import urllib.parse
head={}
head["Referer"] = ""
head["User-Agent"] = ""
data = {}
data["type"] = ""
data["keyform"] = ""
data = urllib.parse.urlencode(data).encode("utf-8")
req = urllib.request.Request(url,data,head)
# req = urllib.request.Request(url,data)
# req.add_header('Referer','')
# req.add_header('User-Agent','')
urllib.request.urlopen(req)
注意:如果长时间靠修改User-Agent进行抓取,那么一个IP短时间内连续进行网页的访问,很可能会被服务
器识别是机器抓取,所以,这里有两种策略可供选择:
第一种就是延迟提交的时间,但是这样会使得工作效率低下。
第二种策略就是使用代理。
使用代理:
使用代理IP,服务器看到的是代理IP地址,而不是你自己的IP地址。
proxy_support = urllib.request.ProxyHandler({'http':'211.138.2.4:80'})
参数是一个字典,字典的键是代理的类型,字典的值就是代理的IP地址和对应的端口号。
opener = urllib.request.build_opener(proxy_support)
opener可以看作是一个私人订制,当使用urlopen()函数打开一个网页的时候,你就是使用默认的opener在工作
所以这里使用build_opener()函数创建了一个属于我们自己私人定制的opener
urllib.request.install_opener(opener)
这里将制定好的opener安装到系统中,这是一劳永逸的做法
因为在此之后,你只需要使用普通的urlopen()函数,就是以定制好的opener进行工作的。
如果你不想替换掉默认的opener,你也可以每次特殊需要的时候,用opener.open()的方法来打开网页。
iplist = input("请输入IP:").split(sep=";")
ip = random.choice(iplist) #随机使用IP
iplist = input("请输入IP:").split(sep=";")
ip = random.choice(iplist) #随机使用IP
Beautiful Soup:
安装Beautiful Soup:
打开cmd,执行命令: python3 -m pip install BeautifulSoup4
在IDE下from bs4 import BeautifulSoup,没有报错说明安装成功
使用Beautiful Soup:
from bs4 import BeautifulSoup
html = response.read().decode('utf-8')
soup = BeautifulSoup(html,'html.parser')
for each in soup.find_all(""):
print(each)
正则表达式:
网上查资料