爬虫 案例(一)

415 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

原文出自于传送门

欢迎访问博主的小破站传送门

文章中的代码都是可以直接运行

爬虫实现在‘必应’上搜索和页面的保持

这个小案例 主要使用的是urllib库的相关比较基础的的知识,适合初学者玩。

这里也可以使用类,将所有的函数放在类里面更加方便管理,对于一般代码比较多的爬虫程序时,博主们都会使用类。

def get_url(word) 函数主要是获取好url便于后面的爬取

def request_url(url,filename) 函数主要进行网页请求,并将请求得到的网页保存到同一个文件夹下。

url = 'cn.bing.com/search?{}' 这个链接可以不是‘必应’,也可以是其他的网站 如 百度的www.baidu.com/s?wd=

这里的这个文件的编码格式也要注意一下 不然有可能会出现一堆乱码 with open(filename,'w',encoding='utf-8') as f

from urllib import parse
def get_url(word):
  url = 'https://cn.bing.com/search?{}'
  #此处使用urlencode()进行编码
  params = parse.urlencode({'q' : '菜鸟'})
  url = url.format(params)
  return url
def request_url(url,filename):
  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'}
  req = request.Request(url=url,headers=headers)
  res = request.urlopen(req)
  html = res.read().decode('utf-8')
  #这里要注意这个编码格式 不然有可能回出现一堆乱码
  with open(filename,'w',encoding='utf-8') as f:
    f.write(html)
word = input('请输入搜索内容:')
url = get_url(word)
filename = word + '.html'
request_url(url,filename)
爬取百度贴吧

这里爬取的是一个静态的网站

from ua_info import ua_list 这个是博主自己使用的一个ua池(需要的小伙伴可以私信博主)

time.sleep(random.randint(1,2)) 每爬取一个页面随机休眠1-2秒钟的时间,主要是为不被抓了,如果只是爬取几个页面也可以不用休眠

run()函数是一个入口函数,spider.run() 调用它,在run()函数里面实现一些基本的数据,然后依次调用get_html(self,url),save_html(self,filename,html),获取网页和保存网页

from urllib import request,parse
import time
import random
from ua_info import ua_list #使用自定义的ua池
class TiebaSpider(object):
    def __init__(self):
        self.url='http://tieba.baidu.com/f?{}'

    def get_html(self,url):
        req=request.Request(url=url,headers={'User-Agent':random.choice(ua_list)})
        res=request.urlopen(req)
        html=res.read().decode("gbk","ignore")
        return html

    def save_html(self,filename,html):
        with open(filename,'w') as f:
            f.write(html)

    def run(self):
        name=input('请输入贴吧名:')
        begin=int(input('输入起始页:'))
        stop=int(input('输入终止页:'))
        for page in range(begin,stop+1):
            pn=(page-1)*50
            params={
                'kw':name,
                'pn':str(pn)
            }
            #拼接URL地址   
            params=parse.urlencode(params)
            url=self.url.format(params)
            html=self.get_html(url)
            filename='{}-{}页.html'.format(name,page)
            self.save_html(filename,html)
            #提示
            print('第%d页抓取成功'%page)
            #每爬取一个页面随机休眠1-2秒钟的时间,为不被抓了
            time.sleep(random.randint(1,2))
#统计程序运行的时间
start=time.time()
spider=TiebaSpider() 
spider.run() 
end=time.time()
print('执行时间:%.2f'%(end-start))  #爬虫执行时间
 

image.png

这是爬取下来的网页源码

本次的分享就到这里了啦,

文章有问题的地方欢迎指出,有任何疑问都可以在评论区留言。希望大家都能够有所收获,大家一起探讨、进步!

如果本章内容对你有所帮助的话可以点赞+收藏