Python——爬取网页信息 Ⅰ
01. 爬取内容并保存到本地
from urllib import request
# 加载一个页面
def loadPage(url):
# 发送请求
req = request.Request(url)
# 打开响应的对象
response = request.urlopen(req)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
return content
# 把下载的内容保存到本地文件
def writePage(html, filename):
print('正在保存到:'+filename)
f = open(filename,'w',encoding='utf-8')
f.write(html)
f.close()
url='https://tieba.baidu.com/f?kw=%E6%9F%AF%E5%8D%97&ie=utf-8'
content = loadPage(url)
print(content)
filename = 'tieba.html'
writePage(content,filename)
02. 设置起始页和终止页
from urllib import request
# 加载一个页面
def loadPage(url):
# 发送请求
req = request.Request(url)
# 打开响应的对象
response = request.urlopen(req)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
return content
# 把下载的内容保存到本地文件
def writePage(html, filename):
print('正在保存到:'+filename)
f = open(filename,'w',encoding='utf-8')
f.write(html)
f.close()
# 设置起始页和终止页
def tiebaSpider(url,beginPage,endPage):
for page in range(beginPage,endPage+1):
pn = 50*(page-1)
fullurl = url+'&pn='+str(pn)
content = loadPage(fullurl)
filename = '第'+str(page)+'页.html'
writePage(content,filename)
url='https://tieba.baidu.com/f?kw=%E6%9F%AF%E5%8D%97&ie=utf-8'
tiebaSpider(url,1,4)
03. 用户输入参数
from urllib import request,parse
# 加载一个页面
def loadPage(url):
# 发送请求
req = request.Request(url)
# 打开响应的对象
response = request.urlopen(req)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
return content
# 把下载的内容保存到本地文件
def writePage(html, filename):
print('正在保存到:'+filename)
f = open(filename,'w',encoding='utf-8')
f.write(html)
f.close()
# 设置起始页和终止页
def tiebaSpider(url,beginPage,endPage):
for page in range(beginPage,endPage+1):
pn = 50*(page-1)
fullurl = url+'&pn='+str(pn)
content = loadPage(fullurl)
filename = kw+'第'+str(page)+'页.html'
writePage(content,filename)
if __name__ == '__main__':
kw = input('请输入要爬取的贴吧:')
beginPage = int(input('请输入起始页:'))
endPage = int(input('请输入终止页:'))
key = parse.urlencode({'kw':kw})
url='https://tieba.baidu.com/f?'
url += key
tiebaSpider(url,beginPage,endPage)
04. 找出帖子的图片链接
from urllib import request
from lxml import etree
# 加载帖子中的图片链接
def loadImage(url):
# 发起请求
req = request.Request(url)
# 打开响应的内容
response = request.urlopen(req)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
# 使用etree对html的内容建立文档树
content = etree.HTML(content)
link_list = content.xpath('//img[@class="BDE_Image"]/@src')
for link in link_list:
print(link)
url = 'https://tieba.baidu.com/p/6243133196'
loadImage(url)
05. 把图片保存到文件中
from urllib import request,parse
from lxml import etree
# 加载帖子中的图片链接
def loadImage(url):
# 发起请求
req = request.Request(url)
# 打开响应的内容
response = request.urlopen(req)
# 获取响应的内容
html = response.read()
# 对网页进行解码
content = html.decode('utf-8')
# 使用etree对html的内容建立文档树
content = etree.HTML(content)
link_list = content.xpath('//img[@class="BDE_Image"]/@src')
for link in link_list:
print(link)
writeImage(link)
# 下载图片并保存到文件中
def writeImage(url):
# 发起请求
req = request.Request(url)
# 打开响应的对象
response = request.urlopen(req)
# 获取响应的内容
image = response.read()
filename = url[-15:] # 命名格式为url后15位
f = open ('img/'+filename,'wb') # 将图片放在img文件夹下
f.write(image)
f.close()
if __name__ =='__main__':
url = 'https://tieba.baidu.com/p/6243133196'
loadImage(url)
06. xpath
xpath的安装
- 在Chrome浏览器中打开开发者模式。
- 把xpath_helper_2_0_2.crx后缀名改为rar(即xpath_helper_2_0_2.rar)。
- 加载已解压的xpath拓展程序。
- 在贴吧网页中,点击该按钮。
- 会出现如下页面。可以在QUERY中写上简单的xpath规则(//div)。在RESULT中呈现搜索出来的内容。
xpath的语法
- 查找标签
总路径下查找标签(以//开头) | 总路径下查找标签(以//开头) | 子路径下查找 |
---|---|---|
//div //span //a | ./div ./span ./a | //div/span //div/a |
- 查找属性
标签名[@属性名=属性值] |
---|
//span[@class=“threadlist_rep_num center_text”] //div/a[@class=“j_th_tit” |
- 读取属性
标签名/@属性名 |
---|
//div/a[@class=“j_th_tit”]/@href //img[@class=“card_head_img”]/@src |
- 读取内容
标签名/text() |
---|
//div/a[@class=“j_th_tit”]/text() |
注意:如果不写text(),实际上拿到的是标签对象;如果写text(),实际上拿到的是文本(字符串)。