说明一下 这个文章博主会持续更新的。
主要是分享一些博主自己写的一些爬虫和网上其他博主分享的爬虫,。
有错误的地方 欢迎加联系方式一起交流。
更新一 爬虫实现在‘必应’上搜索和页面的保持 这个小案例 主要使用的是urllib库的相关比较基础的的知识,适合初学者玩
代码可以直接运行
urllib import request 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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)
爬取百度贴吧 这是爬的一个静态的网站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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)) #爬虫执行时间
更新二 爬取 豆瓣电影排行榜 这是静态网站,爬起来比较简单
主要使用了正则表达式和csv文件操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import re from urllib import request import random from ua_info import ua_list import csv url = 'https://movie.douban.com/chart' p = re.compile('<tr.*?title="(.*?)".*?<p class="pl">(.*?)</p>.*?/tr>',re.S) headers = {'User-Agent':random.choice(ua_list)} r = request.Request(url = url, headers=headers) res = request.urlopen(r) response = res.read().decode('utf-8') # print(response) # print(p.findall(response)) w =p.findall(response) with open( 'doupan.csv','w',newline='',encoding="utf-8") as f: spamwriter = csv.writer(f, delimiter=' ',quotechar='|') spamwriter.writerow(['电影','上映时间和演员']) spamwriter.writerows(w)
爬取 一页豆瓣电影排行top250电影名 也是一个静态网站 属于基础操作系列
如果想爬取整个top250 也比较简单
先观察一下上面每一页的url的特征 ,再做出一定的更改就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import requests from lxml import etree class Spider_douban: def __init__(self): self.url='https://movie.douban.com/top250' self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'} def requ(self): html = requests.get(url = self.url, headers=self.headers).text p = etree.HTML(html) pa = '//a/img/@alt' pb = str(p.xpath(pa)) with open('xiaoyang.txt','w',encoding='utf-8') as f: f.write(pb) def run(self): self.requ() a = Spider_douban() a.run()
爬取百度图片 注意 博主这里用的是 以前翻页式的百度图片网站 。
这里使用的是requests库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 import requests import re from urllib import parse import os class BaiduImageSpider(object): def __init__(self): self.url = 'https://image.baidu.com/search/flip?tn=baiduimage&word={}' self.headers = {'User-Agent':'Mozilla/4.0'} # 获取图片 def get_image(self,url,word): #使用 requests模块得到响应对象 res= requests.get(url,headers=self.headers) # 更改编码格式 res.encoding="utf-8" # 得到html网页 html=res.text print(html) #正则解析 pattern = re.compile('"hoverURL":"(.*?)"',re.S) img_link_list = pattern.findall(html) #存储图片的url链接 print(img_link_list) # 创建目录,用于保存图片 directory = 'D:/File/All/python/spider/image/{}/'.format(word) # 如果目录不存在则创建,此方法常用 if not os.path.exists(directory): os.makedirs(directory) #添加计数 D:\File\All\python\spider\爬虫.html i = 1 for img_link in img_link_list: filename = '{}{}_{}.jpg'.format(directory, word, i) self.save_image(img_link,filename) i += 1 #下载图片 def save_image(self,img_link,filename): html = requests.get(url=img_link,headers=self.headers).content with open(filename,'wb') as f: f.write(html) print(filename,'下载成功') # 入口函数 def run(self): word = input("您想要谁的照片:") word_parse = parse.quote(word) url = self.url.format(word_parse) self.get_image(url,word) spider = BaiduImageSpider() spider.run()