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的安装

  1. 在Chrome浏览器中打开开发者模式。
  2. 把xpath_helper_2_0_2.crx后缀名改为rar(即xpath_helper_2_0_2.rar)。
  3. 加载已解压的xpath拓展程序。
    pic01
  4. 在贴吧网页中,点击该按钮。
    pic02
  5. 会出现如下页面。可以在QUERY中写上简单的xpath规则(//div)。在RESULT中呈现搜索出来的内容。
    pic03

xpath的语法

  1. 查找标签
总路径下查找标签(以//开头)总路径下查找标签(以//开头)子路径下查找
//div
//span
//a
./div
./span
./a
//div/span
//div/a
  1. 查找属性
标签名[@属性名=属性值]
//span[@class=“threadlist_rep_num center_text”]
//div/a[@class=“j_th_tit”
  1. 读取属性
标签名/@属性名
//div/a[@class=“j_th_tit”]/@href
//img[@class=“card_head_img”]/@src
  1. 读取内容
标签名/text()
//div/a[@class=“j_th_tit”]/text()

注意:如果不写text(),实际上拿到的是标签对象;如果写text(),实际上拿到的是文本(字符串)。


07. lxml的安装

pic04

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值