爬虫案例大型汇总
概要
1、爬取天气数据
2、爬取百度翻译
3、爬取药品许可证
4、爬取蔬菜价格
5、爬取红牛分公司数据
6、爬糗图百科(正则/bs4)
7、爬取优美图库的高清图片
8、爬取梨视频汽车视频数据
9、爬取豆瓣电影top250
10、爬取链接二手房数据
11、爬取汽车之家新闻数据
12、爬取城市名称
13、爬取猪八戒
14、爬取贴吧图片
15、百度自动登录
16、爬取京东商品数据
详情
- 
爬取天气数据
 
import requests urlW = 'http://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=60010&areaInfo%5BareaType%5D=2&date%5Byear%5D=2021&date%5Bmonth%5D=9' res = requests.get(urlW) dictW = res.json().get('data') print(dictW)
- 
爬取百度翻译
 
import requests urlEng = 'https://fanyi.baidu.com/sug' # 搜索框下拉数据 resE = requests.post(urlEng, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36X-Requested-With: XMLHttpRequest'}, data={ 'kw': 'q' }) dataE = resE.json().get('data') for d in dataE: print(d)
- 
爬取药品许可证
 
# 1.引入requests模块用于发送网络请求 import requests # 2.指定查找药品信息的url urlXkzsList = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList' # 3.指定查找详情的url urlXkzsDetail = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById' # 4.选择想查询几页 num = int(input('请输入想要查询的页数:').strip()) # 5.逐页循环获取药企信息 for n in range(1, num+1): # 6.将请求体信息放入post请求并向上述url发送 res = requests.post(urlXkzsList, data={ 'on': 'true', 'page': n, # 页码 'pageSize': 15, # 每页数据行数 'productName': '', 'conditionType': 1, 'applyname': '', 'applysn': '' }) # 7.获取上述的响应,为单页药企概要信息 dataList = res.json().get('list') # 8.循环获取每家药企的信息 for d in dataList: # 9.向每家药企发送携带企业ID的post请求 resD = requests.post(urlXkzsDetail, data={'id': d.get('ID')}) # 10.将请求结果(单家药企信息)反序列化成字典 resDict = resD.json() # 11.获取企业名称 comName = resDict.get('epsName') # 12.打开企业信息文件 with open(r'company.txt', 'a', encoding='UTF-8') as f: # 将详情信息写入该文件 f.write('企业名称:{}\n{}\n'.format(comName, str(resDict)))
- 
爬取蔬菜价格
 
# 1.引入requests模块用于发送网络请求 import requests """ 蔬菜网站 http://www.xinfadi.com.cn/priceDetail.html """ # 2.首页加载时向该url发送post请求 urlP = 'http://www.xinfadi.com.cn/getPriceData.html' # 3.输入想要查找的页数 num = int(input('请输入想要查找的页数:').strip()) # 4.按照页循环 for n in range(1, num+1): # 3.设置请求的请求体参数 dataP = { 'limit': 20, # 每页限制条数 'current': n, # 当前页 'pubDateStartTime': '', 'pubDateEndTime': '', 'prodPcatid': '', 'prodCatid': '', # 默认1186为蔬菜的编号 'prodName': '' } # 4.发送post请求 resP = requests.post( urlP, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36' }, data=dataP ) # 5.获取上述请求的响应,为单页蔬菜价格信息 vegeList = resP.json().get('list') # 6.循环写入每一条蔬菜数据 for i in vegeList: # 7.获取蔬菜名称 prodName = i.get('prodName') # 8.获取当天日期 pubDate = i.get('pubDate') # 9.打开存放蔬菜价格的文件 with open(r'vegetablePrice.txt', 'a', encoding='UTF-8') as f: # 10.将价格信息写入文件 f.write('{}——{}\n{}\n'.format(pubDate, prodName, i))
- 
爬取红牛分公司数据
 
1、正则
import requests import re # 1.向红牛网站发送请求 comRes = requests.get('http://www.redbull.com.cn/about/branch') # 2.获取红牛分公司名称、地址、邮编、电话 cNameList = re.findall("data-title='(.*?)'", comRes.text) cAddrList = re.findall("data-describe='(.*?)'", comRes.text) cMailList = re.findall("class='mailIco'>(.*?)<", comRes.text) cTelList = re.findall("class='telIco'>(.*?)<", comRes.text) # 3.将获取到的分公司数据一一对应(按照名称循环) for i in range(len(cNameList)): print(""" 公司名称:{} 公司地址:{} 公司邮箱:{} 公司电话:{} """.format(cNameList[i], cAddrList[i], cMailList[i], cTelList[i]) )
2、bs4
import requests from bs4 import BeautifulSoup # 1.数据就在页面上显示,直接发送请求即可 res = requests.get('http://www.redbull.com.cn/about/branch') soup = BeautifulSoup(res.text, 'lxml') # 2.获取分公司名称 h2List = soup.find_all('h2') nameList = [tag.text for tag in h2List] # 3.获取分公司地址 p1List = soup.find_all(name='p', attrs={'class': 'mapIco'}) addrList = [tag.text for tag in p1List] # 4.获取分公司邮编 p2List = soup.find_all(name='p', attrs={'class': 'mailIco'}) postalCodeList = [tag.text for tag in p2List] # 5.获取分公司电话 p3List = soup.find_all(name='p', attrs={'class': 'telIco'}) phoneList = [tag.text for tag in p3List] # 6.将获取到的分公司数据一一对应(按照名称循环) for i in range(len(nameList)): print(""" 公司名称:{} 公司地址:{} 公司邮箱:{} 公司电话:{} """.format(nameList[i], addrList[i], postalCodeList[i], phoneList[i]) )
- 
爬糗图百科(正则/bs4)
 
1、正则
import requests import os import re # 1.图片在网页上,直接发送请求即可 qiushiRes = requests.get('https://www.qiushibaike.com/imgrank/') resText = qiushiRes.text # 2.通过正则匹配糗图 imgList = re.findall('<img src="(.*?)" alt="糗事.*"', resText) # 3.判断是否存在存放图片文件夹,不存在则创建 if not os.path.exists(r'糗图'): os.mkdir(r'糗图') # 4.循环获得的图片 for imgLink in imgList: # 5.组合图片链接 realLink = "https:"+imgLink # 6.向图片链接发送get请求,返回流文件 image = requests.get(realLink, stream=True) # 7.新建图片文件 with open(r'糗图\{}'.format(imgLink.split('/')[-1]), 'wb') as f: # 8.逐行写入 for line in image.iter_content(): f.write(line)
2、bs4
import requests from bs4 import BeautifulSoup import os # 1.图片在网页上,直接发送请求即可 qiushiRes = requests.get('https://www.qiushibaike.com/imgrank/') resText = qiushiRes.text # 2.构造解析器对象 soup = BeautifulSoup(resText, 'lxml') # 3.判断是否存在存放图片文件夹,不存在则创建 if not os.path.exists(r'糗图'): os.mkdir(r'糗图') # 34.查找图片 imgTagList = soup.find_all(name='img', attrs={'class': 'illustration'}) for img in imgTagList: # 4.拼接完整链接 realLink = 'https:' + img.get('src') # 5.向图片链接发送get请求,返回流文件 image = requests.get(realLink, stream=True) # 6.新建图片文件 with open(r'糗图\{}'.format(img.get('src').split('/')[-1]), 'wb') as f: # 8.逐行写入 for line in image.iter_content(): f.write(line)
- 
爬取优美图库的高清图片
 
import requests from bs4 import BeautifulSoup import os import time # 1.判断存放图片的目录是否存在,不存在则自动创建 if not os.path.exists(r'动漫图片'): os.mkdir(r'动漫图片') # 2.图片首页地址 pageUrl = 'https://www.umei.cc/katongdongman/dongmantupian/' # 3.向图片首页地址发送get请求 res = requests.get(pageUrl) # 4.指定合适的字符编码 res.encoding = 'UTF-8' # 5.构造html解析器 soup = BeautifulSoup(res.text, 'lxml') # 6.筛选图片所在的页面布局标签 divTag = soup.find(name='div', attrs={'class': 'TypeList'}) # 7.筛选页面布局下的列表标签 liList = divTag.find_all(name='li') # 8.获取每个a标签的href属性 imgDetailTag = [li.a.get('href') for li in liList] # 9.将每个href属性值补全成完整网址(图片详情页) imgDetailUrlList = ['https://www.umei.cc'+imgDetailUrl for imgDetailUrl in imgDetailTag] # 10.循环图片详情页 for imgDetail in imgDetailUrlList: # 11.向图片详情页发送请求 res1 = requests.get(imgDetail) # 12.对图片详情页构造html解析器 soupD = BeautifulSoup(res1.text, 'lxml') # 13.获取img标签 imgBigTag = soupD.select('div.ImageBody img') # 14.select返回结果需要循环,获取图片链接 for imgBig in imgBigTag: # 15.设置时间延迟 time.sleep(1) print(imgBig.get('src')) # 16.向大图链接发送请求 img = requests.get(imgBig.get('src'), stream=True) # 17.拼接文件路径 filePath = os.path.join(r'动漫图片', imgBig.get('src').split('/')[-1]) # 18.保存图片 with open(filePath, 'wb') as f: for line in img.iter_content(): f.write(line)
- 
爬取梨视频汽车视频数据
 
# 引入发送网络请求的模块 import requests # 引入处理HTML文件的模块 from bs4 import BeautifulSoup # 引入文件操作模块 import os # 引入时间模块 import time # 1.判断存放视频的目录是否存在,不存在则自动创建 if not os.path.exists(r'梨视频_Car'): os.mkdir(r'梨视频_Car') def getVideo(n): """ 获取梨视频汽车板块全部视频方法 参数n : 起始视频索引 """ # 1.梨视频汽车板块和主页的url carUrl = 'https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=31&start={}'.format(n) baseUrl = 'https://www.pearvideo.com/' # 2.向梨视频汽车板块发送get请求 carRes = requests.get(carUrl) # 3.针对梨视频汽车板块的网页构造html解析器 carSoup = BeautifulSoup(carRes.text, 'lxml') # 4.获取所有存放视频的li标签 liList = carSoup.find_all(name='li', attrs={'class': 'categoryem'}) # 5.获取a标签的href值,同时也是视频编号 videoDetailList = [li.a.get('href') for li in liList] # 6.循环视频编号 for video in videoDetailList: # 主动延迟 time.sleep(1) # 7.获取视频编号 videoCode = video # 8.获取视频id videoId = videoCode.split('_')[-1] # 9.向视频链接发送请求 videoRes = requests.get('https://www.pearvideo.com/videoStatus.jsp', params={'contId': videoId}, headers={'referer': baseUrl + videoCode} ) # 9.将返回结果反序列化 dataJson = videoRes.json() # 10.获取视频链接 srcUrl = dataJson.get('videoInfo').get('videos').get('srcUrl') # 11.需要获取真实链接 realUrl = srcUrl.replace(dataJson.get('systemTime'), 'cont-{}'.format(videoId)) # 12.向真实视频链接发送请求 realVideoRes = requests.get(realUrl, stream=True) # 13.拼接文件路径 filePath = os.path.join(r'梨视频_Car', '{}.mp4'.format(videoId)) # 14.以写模式打开文件 with open(filePath, 'wb') as f: # 16.按行读取视频 for line in realVideoRes.iter_content(): f.write(line) print('视频{}下载成功!!!'.format(videoId)) """调用此方法""" for n in range(12, 48, 12): getVideo(n)
- 
爬取豆瓣电影top250
 
import time from openpyxl import Workbook import requests from bs4 import BeautifulSoup import re def getMovies(n, ws): """ 获得豆瓣电影top250 参数 n: 页码 """ # 1.指定基础网址 baseUrl = 'https://movie.douban.com/top250?start={}'.format(n * 25) # 2.发送get请求获得豆瓣电影top250首页 res = requests.get(baseUrl, headers={ 'referer': 'https://movie.douban.com/top250?start=0', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' }) # 3.构造针对豆瓣电影top250首页的解析器 soup = BeautifulSoup(res.text, 'lxml') # 4.获取电影列表的祖先标签 class为item的div标签 divItemTags = soup.select('div.item') # 5.循环存放电影的li标签 for movie in divItemTags: time.sleep(1) # 6.获取电影名称 title = movie.span.text # 7.获取电影导演和主演混合的文本 dmText = movie.select('div.bd')[0].p.text # 8.获取导演姓名 director = re.findall('导演: (.*?) ', dmText)[0] # 9.获取主演姓名(可能为空) mainActor = '' if len(re.findall('主演: (.*?) ', dmText)) > 0: mainActor = re.findall('主演: (.*?) ', dmText)[0] # 10.获取评分 ratingNum = movie.select('span.rating_num')[0].text # 11.获取评价人数 ratingCount = movie.select('div.star span')[3].text # 12.获取座右铭(可能为空) motto = '' if len(movie.select('p.quote>span.inq')) > 0: motto = movie.select('p.quote>span.inq')[0].text # 13.将电影相关信息添加至excel文件相关表末尾 ws.append([title, director, mainActor, ratingNum, ratingCount, motto]) """爬取电影排行""" # 1.新建excel文件对象 wbMovie = Workbook() # 2.创建工作表 ws250 = wbMovie.create_sheet('豆瓣电影top250') # 3.定义表头 ws250.append(['电影名称', '导演姓名', '主演姓名', '评分', '评价人数', '座右铭']) # 4.输入需要的页数 pageNum = int(input('想看几页的电影排行:').strip()) # 5.调用方法 for page in range(pageNum): getMovies(int(page), ws250) # 6.保存表格文件 wbMovie.save(r'豆瓣电影top250_{}.xlsx'.format(time.strftime('%Y-%m-%d')))
- 
爬取链接二手房数据
 
import time import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 1.创建Excel表格文件 wbHouse = Workbook() # 2.创建工作表 ws1 = wbHouse.create_sheet('某地区二手房', 0) ws1.append(['房屋名称', '详情链接', '小区名称', '区域名称', '详细信息', '关注人数', '发布时间', '总价(万元)', '单价(元/平)']) def handleInfo(info): """ 分割详细信息 户型,大小,朝向,装修程度,楼层,年代,楼型 """ details = info.split('|').strip() if not len(details) == 7: details[0] = info return details def getTwoHandHouse(city, area, n): """ 获取特定地区房屋信息 房屋名称,详情链接,小区名称,区域名称,详细信息(可拆分),关注人数,发布时间,总价,单价 """ # 1.指定网站url twoHandUrl = 'https://{}.lianjia.com/ershoufang/{}/pg{}/'.format(city, area, n) # 2.定义请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36" } # 3.发送请求 resBS = requests.get(twoHandUrl, headers=headers) # 4.利用解析库筛选数据 soup = BeautifulSoup(resBS.text, 'lxml') # 5.找到显示房屋信息的列表 houseList = soup.select('ul.sellListContent>li') # 6.循环当页所有房屋 for house in houseList: # 1.获取存放名称、链接的a标签 aTag = house.select('div.title>a')[0] if not aTag: continue # 获取房屋名称 houseName = aTag.text # 获取详情链接 link = aTag.get('href') # 2.获取存放小区、地区的div标签 divPosiTag = house.select('div.positionInfo')[0] posi = divPosiTag.text.split('-') # 根据是否有不可分割的位置信息,做不同处理 if len(posi) == 2: estateName = posi[0] estateArea = posi[1] elif len(posi) == 1: estateName, estateArea = posi[0] else: estateName, estateArea = '' # 3.获取存放详细信息的div标签 divInfoTag = house.select('div.houseInfo')[0] # 获取详细信息 info = divInfoTag.text # 分割详细信息 # detail =handleInfo(info) # 4.获取关注度与发布时间的div标签 divFollowTag = house.select('div.followInfo')[0] focusTime = divFollowTag.text # 获取关注人数 peopleNum = focusTime.split('/')[0].strip() # 获取发布时间(多少天以前) publishTime = focusTime.split('/')[1].strip() # 5.获取总价标签 divTotalTag = house.select('div.totalPrice')[0] # 获取总价 totalPrice = divTotalTag.span.text # 6.获取单价标签 divUnitTag = house.select('div.unitPrice')[0] # 获取单价 unitPrice = divUnitTag.text.strip('元/平') ''' 主动延迟 ''' time.sleep(1) # 7.将数据添加至Excel表格文件 ws1.append([houseName, link, estateName, estateArea, info, peopleNum, publishTime, totalPrice, unitPrice]) num = int(input('请输入需要的二手房页数: ').strip()) # 按页获取二手房 for n in range(1, num+1): getTwoHandHouse('sh', 'baoshan', n) print('第{}页获取完成'.format(n)) # 保存文件 wbHouse.save(r'二手房.xlsx')
- 
爬取汽车之家新闻数据
 
import os import time import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 1.创建Excel表格文件 wbCar = Workbook() # 2.创建工作表 ws1 = wbCar.create_sheet('汽车之家新闻', 0) ws1.append(['标题', '详情链接', '图标', '发布时间', '简介']) if not os.path.exists('车闻详情'): os.mkdir(r'车闻详情') def getCarNews(n): """ 获取汽车之家新闻相关信息 标题、链接、图标、发布时间、简介 """ # 1.指定汽车之家新闻网的链接 carNewsUrl = 'https://www.autohome.com.cn/news/{}/#liststart'.format(n) # 2.定义请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36" } # 2.向汽车之家发送请求 carRes = requests.get(carNewsUrl, headers=headers) # 3.避免乱码,按照响应设置字符编码 carRes.encoding = 'GBK' # 4.构造html文件解析器 carSoup = BeautifulSoup(carRes.text, 'lxml') # 5.先查找存放新闻信息的li标签 newsList = carSoup.select("ul.article>li") for news in newsList: # 1.获取链接 aTag = news.find('a') if not aTag: continue link = 'https:' + aTag.get('href') # 2.获取标题 if not aTag.find('h3'): continue title = aTag.find('h3').text # 3.获取发布时间 if not aTag.select('span.fn-left'): continue pubTime = aTag.select('span.fn-left')[0].text # 4.获取图标 img = '' if aTag.find('img'): img = 'https:' + aTag.find('img').get('src') # 5.获取简介 desc = '' if aTag.find('p'): desc = aTag.find('p').text # 6.获取详情 newsRes = requests.get(link, headers=headers) article = newsRes.text filePath = os.path.join('车闻详情', r'{}.html'.format(title)) # 7.保存至html文件 try: with open(filePath, 'w', encoding='UTF-8') as f: f.write(article) except Exception: print(title) # .将数据添加到Excel表格文件 ws1.append([title, link, img, pubTime, desc]) # 主动延迟 time.sleep(1) # 输入想要获取的新闻数目 pageNum = int(input('请输入想要获取的汽车新闻的数量(页): ').strip()) # 按页获取新闻 for n in range(1, pageNum+1): # 调用爬取汽车之家新闻信息的函数 getCarNews(n) # 保存文件 wbCar.save(r'车闻.xlsx')
- 
爬取城市名称
 
import requests from lxml import etree # 1.基础链接 cityUrl = 'https://www.aqistudy.cn/historydata/' # 2.发送请求 cityRes = requests.get(cityUrl, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'} ) # 3.生成xpath对象 cityHtml = etree.HTML(cityRes.text) # 4.获取热门城市名称列表 hotCityList = cityHtml.xpath('//div[@class="hot"]/div[2]/ul/li/a/text()') # print(hotCityList) # 5.获取全部城市名称列表 allCityList = cityHtml.xpath('//div[@class="all"]/div[2]/ul/div[2]/li/a/text()') # print(allCityList) # 6.获取该页面全部城市名称 allCityNames = cityHtml.xpath( '//div[@class="hot"]/div[2]/ul/li/a/text() | //div[@class="all"]/div[2]/ul/div[2]/li/a/text()') print(allCityNames)
- 
爬取猪八戒
 
import requests from lxml import etree from openpyxl import Workbook # 1.创建Excel表格文件对象 wbWork = Workbook() ws1 = wbWork.create_sheet('工作内容', 0) ws1.append(['公司名称', '地址', '工作内容描述', '订单价格', '历史成交量(近半年)']) def getWork(kw): """ 获取工作相关订单信息 """ # 1.设置网页基本链接 workUrl = 'https://shanghai.zbj.com/search/f' # 2.发送请求获取页面数据 workRes = requests.get(workUrl, params={'kw': kw} ) # 3.生成xpath对象 workHtml = etree.HTML(workRes.text) '''直接查找很多时候是无法使用的 因为会出现数据混乱的现象''' # companyName = workHtml.xpath('//div[@class="new-service-wrap"]/div/div/div/a/div[1]/p/text()') # print(companyName) # 4.先查找所有含有数据的div,再依次循环 divList = workHtml.xpath('//div[@class="new-service-wrap"]/div') # 5.循环工作订单信息 for div in divList: # 6.获取公司名称 companyName = div.xpath('./div/div/a/div[1]/p/text()') # 7.发现有广告位,名称列表存在空值,添加判断 if not companyName: continue # 8.去列表末位去除空格获取公司名称 cName = companyName[-1].strip() # 9.获取公司地址 addressInfo = div.xpath('./div/div/a/div[1]/div/span/text()')[0] # 10.获取订单价格 price = div.xpath('./div/div/a[2]/div[2]/div[1]/span[1]/text()')[0] # 11.获取成交量 amount = div.xpath('./div/div/a[2]/div[2]/div[1]/span[2]/text()')[0].strip('近半年成交:') # 12.工作内容 desc = div.xpath('./div/div/a[2]/div[2]/div[2]/p//text()') # print(''.join(desc)) # 13.添加至Excel表格 ws1.append([cName, addressInfo, ''.join(desc), price, amount]) # 输入搜索关键字 kw = input('请输入工作内容: ').strip() # 调用方法 getWork(kw) wbWork.save('{}工作订单.xlsx'.format(kw))
- 
爬取贴吧图片
 
import time import os import requests from lxml import etree def getTiebaImg(tName, pageNum): """ 获取贴吧图片 tName: 贴吧名 """ # 1.设置搜索基础地址和贴吧地址 searchUrl = 'https://tieba.baidu.com/f' baseUrl = 'https://tieba.baidu.com' # 2.发送请求 # TODO:多页数据 只需要再加一个pn参数即可 tRes = requests.get(searchUrl, params={'kw': tName, 'pn': (pageNum-1) * 50 } ) # 3.利用响应文本生成xpath对象 tHtml = etree.HTML(tRes.text) # print(tRes.text) # 4.循环帖子链接,拼接成完整地址,再向每个帖子发送请求 aLinkList = tHtml.xpath('//a[@class="j_th_tit "]/@href') for link in aLinkList: fullLink = baseUrl + link # 5.向帖子发送请求 tieRes = requests.get(fullLink) tieHtml = etree.HTML(tieRes.text) # 6.获取图片链接 imgSrcList = tieHtml.xpath('//img[@class="BDE_Image"]/@src') print(imgSrcList) """主动延迟""" time.sleep(2) for imgSrc in imgSrcList: # 7.向图片地址发送请求 imgRes = requests.get(imgSrc) # 8.拼接文件路径并保存 filePath = os.path.join(tiebaName, imgSrc[-16:]) with open(filePath, 'wb') as f: f.write(imgRes.content) print('{}下载完成'.format(imgSrc[-16:])) """主动延迟""" time.sleep(1) # 获取用户想要爬取的贴吧名称、页数 tiebaName = input('请输入你想要获得哪个贴吧的图片: ').strip() pn = int(input('请输入你想要搜索的页数: ').strip()) # 判断是否存在名称为当前贴吧名称的文件夹 if not os.path.exists(tiebaName): os.mkdir(tiebaName) # 调用函数 for n in range(1, pn + 1): getTiebaImg(tiebaName, pn)
- 
百度自动登录
 
1、用户名密码登录
from selenium import webdriver import time # 1.指定操作的浏览器驱动(谷歌) bro = webdriver.Chrome() # 2.控制浏览器访问网站 bro.get('https://www.baidu.com') # 3.获取登录链接标签 loginTag = bro.find_element_by_id('s-top-loginbtn') # 4.点击登录链接 loginTag.click() # 5.一般弹出窗口都是悬浮窗口 # 该页面登录框不是由悬浮窗口构成,这里直接查找即可 # bro.switch_to.frame('iframeResult') '''延迟等待:页面数据有时候需要时间加载 但是代码不会自动等''' time.sleep(3) # 6.获取用户名以及密码输入框 userName = bro.find_element_by_id('TANGRAM__PSP_11__userName') password = bro.find_element_by_id('TANGRAM__PSP_11__password') # 7.书写用户名和密码 userName.send_keys('正确的用户名') password.send_keys('正确的密码') # 8.获取登录按钮 loginBtn = bro.find_element_by_id('TANGRAM__PSP_11__submit') # 9.点击登录按钮 loginBtn.click() # 10.延迟并关闭 time.sleep(15) bro.close()
2、短信验证码登录
from selenium import webdriver import time # 1.使用谷歌浏览器访问百度首页 bro = webdriver.Chrome() bro.get('https://www.baidu.com/') # 2.查找页面上的登录按钮 login_tag = bro.find_element_by_id('s-top-loginbtn') # 3.点击登录按钮 time.sleep(0.5) login_tag.click() time.sleep(3) # 4.查找点击短信登录按钮 message_tag = bro.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem') message_tag.click() time.sleep(0.5) # 5.查找手机号输入框并填写内容 phone_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsPhone') phone_tag.send_keys(18818188888) time.sleep(0.5) # 6.查找发送验证码按钮并点击 btn_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsTimer') btn_tag.click() time.sleep(0.5) # 7.查找并点击登录按钮 submit_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsSubmit') submit_tag.click() time.sleep(0.5) # 8.关闭浏览器 bro.close()
- 
爬取京东商品数据
 
import time from selenium import webdriver from selenium.webdriver.common.keys import Keys bro = webdriver.Chrome() # 1.访问京东首页 bro.get('https://www.jd.com/') bro.implicitly_wait(10) # 延时等待 # 2.查找搜索款并输入商品名称 search_input = bro.find_element_by_id('key') search_input.send_keys('高达') # 3.按下enter键进入商品展示页 search_input.send_keys(Keys.ENTER) # 由于数据存在滚动加载的现象 for i in range(0, 8000, 1000): # 千万不能直接到底 一定要有一个波段 bro.execute_script('window.scrollTo(0,%s)' % i) time.sleep(0.5) good_list = bro.find_elements_by_css_selector('li.gl-item') # 循环获取每一个li标签 筛选所需数据 for li in good_list: # 图标标签的src属性 img_tag = li.find_element_by_css_selector('div.p-img a img') img_src = img_tag.get_attribute('src') '''img标签的src属性存在懒加载现象 src没有就在data-lazy-img属性下''' if not img_src: img_src = 'https:' + img_tag.get_attribute('data-lazy-img') # 商品价格 price_tag = li.find_element_by_css_selector('div.p-price strong') order_price = price_tag.text # 商品描述 desc_tag = li.find_element_by_css_selector('div.p-name a em') order_desc = desc_tag.text # 商品链接 link_tag = li.find_element_by_css_selector('div.p-name a') order_link = link_tag.get_attribute('href') # 商品销量 commit_tag = li.find_element_by_css_selector('div.p-commit strong a') order_commit = commit_tag.text # 店铺名称 shop_tag = li.find_element_by_css_selector('div.p-shop span a') shop_name = shop_tag.text # 店铺链接 shop_link = shop_tag.get_attribute('href') # 通过打印展示数据 也可以数据持久化到表格文件 print(""" 商品描述:%s 商品价格:%s 商品图片:%s 商品链接:%s 店铺名称:%s 店铺链接:%s """ % (order_desc, order_price, img_src, order_link, shop_name, shop_link)) # 关闭浏览器 bro.close()
                    
                
                
            
        
浙公网安备 33010602011771号