首页 文章 精选 留言 我的

精选列表

搜索[爬虫],共3024篇文章
优秀的个人博客,低调大师

2.python爬虫基础——Urllib库

#python中Urllib库实战 #系统学习urllib模块,从urllib基础开始。学习urlretrieve(),urlcleanup(),info(),getcode(),geturl() import urllib.request #urlretrieve() 直接将一个网页爬到本地 urllib.request.urlretrieve("http://www.hellobi.com",filename="/Users/xubin/myapp/pythonfile/urlretrieve.html") #urlcleanup() 将urlretrieve产生的缓存,清空 urllib.request.urlcleanup() #info() 将一些基础的环境信息展示粗来 file=urllib.request.urlopen("http://www.hellobi.com") print(file.info()) #getcode() 获取访问url的状态码,返货200, print(file.getcode()) #geturl() 获取爬取得网址 print(file.geturl()) #超时设置 #爬取一个网页,需要时间。访问网页,网页长时间未响应,系统判断网页超时了,无法打开网页。 #服务器反应快设置2秒没反应未超时,如果服务器反应慢设置100秒没反应未超时,timeout超时时间为2 100 file=urllib.request.urlopen("http://www.hellobi.com",timeout=1) for i in range(0,10): try: file=urllib.request.urlopen("http://yum.iqianyue.com",timeout=0.1) data=file.read() print(len(data)) except Exception as e: print("出现异常:"+str(e)) #自动模拟http请求 #客户端如果要与服务器端进行通信,需要通过http请求进行,http请求有很多种 #主要涉及post,get两种方式,比如登录,搜索某些信息的时候会用到 #一般登录某个网站的时候,需要post请求 #一般搜索某些信息的时候,需要get请求 #在百度上搜索关键词,用python实现,需要用到请求,get get请求URL中有? #https://www.baidu.com/s?wd=python import urllib.request import re keywd="徐彬" keywd=urllib.request.quote(keywd) url="http://www.baidu.com/s?wd="+keywd #注意不能用https req=urllib.request.Request(url) data=urllib.request.urlopen(req).read() fh=open("/Users/xubin/myapp/pythonfile/百度python.html","wb") fh.write(data) fh.close() #post请求 比如需要登录用户 需要提交post请求 #http://passport.csdn.net/account/login 用户名:username 密码:password import urllib.request import urllib.parse url="https://passport.csdn.net/account/login" mydata=urllib.parse.urlencode({"username":"bingoxubin","password":"19900127LLBingo"}).encode("utf-8") req=urllib.request.Request(url,mydata) data=urllib.request.urlopen(req).read() fh=open("/Users/xubin/myapp/pythonfile/csdn登录界面.html","wb") fh.write(data) fh.close() ''' #爬取oa上的所有照片,存到OA照片.docx中 #遇到问题,目前所学,只能爬取单页的内容 import re import urllib.request data=urllib.request.urlopen("oa.epoint.com.cn").read() data=data.decode("utf-8") pat="" mydata=re.compile(pat).findall(data) fh=open("/Users/xubin/myapp/pythonfile/OA照片.docx","w") for i in range(0,len(mydata)): fh.write(mydata[i]+"\n") fh.close() '''

优秀的个人博客,低调大师

python-利用豆瓣爬虫发个动态

目前总的来说是失败了。原因可能是因为豆瓣验证码的问题,因为我看不到登录时候的界面,所以没法分析验证码的链接。(我用自己的浏览器登录都是默认不要验证码的,这就尴尬了),所以登录不上,后面的post也就没有意义了。把代码贴出来。 # -*- coding: utf-8 -*- """ Created on Sat Jan 6 14:45:40 2018 @author: xglc """ import requests import time session = requests.session() #创建request对象 def _login(iddata): url = 'https://www.douban.com/accounts/login' login_header = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Origin':'https://www.douban.com/accounts/login', } session.headers.update(login_header) session.post(url,data=iddata,headers=session.headers) #_login() #print(session.headers.items) def _saysth(say_data): url = 'https://www.douban.com/' add_headers = {'Cache-Control':'max-age=0', 'Content-Length':'20', 'Content-Type':'application/x-www-form-urlencoded' } session.headers.update(add_headers) session.post(url,data=say_data,headers=session.headers) if __name__ == '__main__': iddata = {'form_mail':'账号', 'form_password':'密码', 'redir':'https://www.douban.com', 'login':'登录', } _login(iddata) print ('_login') # print (session.headers.items) for i in range(5): print(5-i) time.sleep(1) say_data = {'ck':'OJop', 'comment':'vict', } _saysth(say_data) print('完成!') View Code 也不打算继续扣了,因为用的是自己平时用的账号,post 太多豆瓣别把我给封了?如果继续扣的话,大概方向有两点: 找出豆瓣验证码的链接(我手动登录完全看不到验证码,这是我的常用电脑,所以无法分析) 完善update一下headers的内容,那里还有一些需要修改的项。 这几天淮南雪都开始化了,零下5度,made,空调还给我偶尔出冷风,需要赶紧上班去办公室温暖一下。 手动分析豆瓣js查看: Python-关于豆瓣发布“说句话”,添加网页等的js行为分析

优秀的个人博客,低调大师

欢迎使用CSDN-markdown编辑器Python爬虫初接触,学会爬虫不抓美女图片干啥!

学习编程语言是很枯燥的,尤其是对一个编程零基础的人来说,更为枯燥!所以我们要从枯燥的学习中找点乐趣和动力!比如,抓点小姐姐的图片 我们的目标选择唯一图库,url自己去找【人工呲牙笑】 这个网站没有反爬,特别好爬,打开主页后,找到美女图片分类 上面分类没有这个分类,自己想办法进入哦。。。 然后往下拉,就会发现N多的图集,我们先去找找翻页,记得先打开F12开发者工具,然后选择翻页,查看源代码中位置! 可以看到这里就是控制页面翻页的源代码了,我们直接拿到a标签的href属性,这个是最后一页的地址,将属性中的“789”切出来,就拿到了最大页码,然后循环拿到所有页面的url,如下图 这样就拿到所有页面的url了,然后我们取图集的url,同样的方式,找到源码中url的位置 img_urls = etree.HTML(requests.get(url_i).text).xpath('//div[@class="ABox"]/a/@href') #url_i 是页面的url,也就是上个代码截图中那个列表,循环遍历出来的 一行代码就取到了所有a标签下的图集地址,一页有24个图集!这里我们用一个函数来获取所有图集内图片地址并返回图集名字和图片地址 这样,主要内容就写完了,然后就是构建整个代码,写入本地,我还将之前做的进度条也加进去了,整体代码和效果发出来看看! import os import time import requests from lxml import etree def get_img_url(url): ''' :param url: 图集url :return: 图集名字和图片地址所构成的字典 ''' img = {}#空字典,用于放图片url和对应的编号 html = requests.get(url)#获取页面源码 html.encoding = 'gb2312' data = etree.HTML(html.text)#解析 title = data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/text()')[0]#图集名 page = data.xpath('//div[@class="wrapper clearfix imgtitle"]/h1/span/span[2]/text()')[0]#图集图片数 img['1'] = data.xpath('//a[@class="down-btn"]/@href')[0]#第一张的图片地址 for i in range(2,int(page)+1): #其余的图片地址 img_url = etree.HTML(requests.get(url.replace('.html','_%s.html'%str(i))).text).xpath('//a[@class="down-btn"]/@href')[0] img['%s'%str(i)] = img_url#写入字典 return title,img def downloader(url,path,name,header={}): start = time.time()#开始时间 if os.path.exists(path): # 判断路径及文件夹是否存在,不存在即创建 pass else: os.mkdir(path) size = 0 if header is None: response = requests.get(url, stream=True)#stream属性必须带上 else: response = requests.get(url, stream=True,headers=header)#stream属性必须带上 chunk_size = 1024#每次下载的数据大小 content_size = int(response.headers['content-length'])#总大小 if response.status_code == 200: print('[文件大小]:%0.2f MB' % (content_size / chunk_size / 1024))#换算单位并print with open(path+'\\%s'%name, "ab") as file: for data in response.iter_content(chunk_size=chunk_size): file.write(data) file.flush()#清空缓存 size += len(data)#已下载文件大小 #\r指定行第一个字符开始,搭配end属性完成覆盖进度条 print('\r'+'[下载进度]:%s%.2f%%' % ('>'*int(size*50/ content_size),float(size / content_size * 100)),end='') end = time.time()#结束时间 print('\n'+"%s下载完成!用时%.2f秒"%(name,(end-start))) if __name__ == '__main__': url_list=[]#放入所有页面url url = 'http://www.mmonly.cc/mmtp/' url_list.append(url)#先放入第一页 html = requests.get(url) html.encoding = 'gb2312' page = etree.HTML(html.text).xpath('//a[text()="末页"]/@href')[0].split('_')[-1].split('.')[0] for i in range(2,int(page)+1): url_list.append(url+'list_9_{}.html'.format(str(i)))#其余页面url,注意第一页和其他页不一样 for url_i in url_list: img_urls = etree.HTML(requests.get(url_i).text).xpath('//div[@class="ABox"]/a/@href') for img_url in img_urls: title,imgs = get_img_url(img_url) for img in imgs.keys(): path = 'E:\\python\\mn\\%s' % title downloader(url= imgs[img],path=path,name='%s.jpg'%(title+img)) 其实这里我想说的是,整个网站很标题党。。。完全不符合标题的。

优秀的个人博客,低调大师

Selenium,Playwright,Puppeteer 做爬虫有哪些弊病?

selenium,playwright和puppeteer这几个自动化工具很适合采集那些动态加载的网站,比如电商、社交媒体等,需要你点击、翻页才能加载出来数据,它们模仿人工操作浏览器,完美解决了这个问题,这是requests做不到的。 ![](https://developer.qcloudimg.com/http-save/yehe-2919732/10bcc5d567f7395b1ed3b0c21a3662a4.png) 但这几个货也有很大缺点,首先容易出错,对于浏览器和依赖库的配合程度要求高,不像requests单枪匹马能搞定一切。 其次它们容易被网站检测到,现在很多网站但凡发现有自动化程序访问的痕迹就会跳出来验证码,而且有些网站哪怕你是真人访问,也要做人机验证,屡教不改的直接封ip。 另外合规性尺度比较难以把控,要注意自动化工具得遵守网站的robot协议,做一些自动化检测、采集少量公开数据没啥问题,对网站造成干扰的事情可不能干。 那selenium,laywright和puppeteer们如何能有效规避检测呢?这里面就涉及到太多需要做的事情了,我觉得有几下几个事情比较重要。 1、尽量不要使用无头浏览器 很多网站会直接识别headless模式,也就是无头模式,因为只有selenium这类的自动化工具才会这么干,真人只会在浏览器界面访问,所以用自动化工具时要打开真实浏览器界面,这样不容易被检测。 2、要模仿真人使用浏览器的行为 用自动化工具点击、翻页、下载等动作之间设置不定时的延迟,比如1~5秒的随机延迟,这样是为了模仿真人行为的不规律性。 3、调整浏览器指纹 浏览器指纹包括像User-Agent、屏幕分辨率等,可以使用多个真实的User-Agent随机轮换访问,设置浏览器界面为常见分辨率等。 4、设置代理IP池 同一个IP访问频率和时间过长,也会被检测,所以需要找一些质量好点的IP池,可以切换访问。 5、可以尝试用亮数据的采集api 如果是技术小白,不会写上面提到的那些规避措施代码,就可以尝试用亮数据的这样的采集api,它把各种规避检测的技术、IP代理池都封装到一个接口里,用python直接访问。 https://get.brightdata.com/weijun 它还提供了专门的云上浏览器,用selenium,playwright或puppeteer都可以接入,和普通浏览器一样,有头无头都支持,但不需要再写各种反爬措施之类的脚本,比较简单直接。 用亮数据还有一个好处是,它遵守数据采集协议,不会触发合规问题。 总的来说,selenium,playwright或puppeteer优点远大于缺点,而且playwright还推出了mcp服务,能通过agent调用,不需要代码,自然语言就能指挥它采集网页数据,方便的很。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册