访问
#引用库
import urllib.request
url = 'https://www.baidu.com'
x = urllib.request.urlopen(url)
print(x.read())
post
#引用库
import urllib.request
import urllib.parse
#网址和要传递的参数
url = 'https://www.pythonprogramming.com'
values = {'s':'basic',
'submit':'search'}
#在post中要encode参数
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
#发送和接受数据
req = urllib.request.Request(url,data)
resq = urllib.request.urlopen(req)
resqData = resq.read()
print(respData)
一般网站不希望机器(网络上的爬虫)去窃取网站内容,他们只希望真正的用户去使用。所以针做了一些限制。
让我们用一般方法向Google传递参数,执行搜索,接收搜索的内容。这里,Google让我们吃了一个闭门羹:你是程序,不是人,我禁止你读取内容。
import urllib.request
try:
x = urllib.request.urlopen('https://www.google.com/search?q=test')
print(x.read())
except Exception as e:
print(str(e))
因此,我们要在传递参数的同时,加上表头,伪造成浏览器用户。
try:
url ='https://www.google.com/search?q=test'
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
#发送和接受数据
req = urllib.request.Request(url,headers=headers)
resq = urllib.request.urlopen(req)
resqData = resq.read()
#因为数据很多,所以我们写人文件中,防止宕机
saveFile = open('withHeaders.txt','w')
saveFile.write(str(resqData))
saveFile.close()
except Exception as e:
print(str(e))
获取想要的内容
#引用库
import urllib.request
import urllib.parse
import re
#网址和要传递的参数
url = 'https://www.pythonprogramming.com'
values = {'s':'basic',
'submit':'search'}
#在post中要encode参数
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
#发送和接受数据
req = urllib.request.Request(url,data)
resq = urllib.request.urlopen(req)
resqData = resq.read()
#利用正则筛选想要的结果,这里我们想要获取<p>标签之间的内容
paragraphs = re.findall(r'<p>(.*?)</p>')
for eachP in paragraphs:
print(eachP)