1. 首页
  2. IT资讯

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

今天情人节,福利:送妹子!!

都2020年了还没爬过今日头条,你做爬虫是不是显得OUT了?但是没事,虽然现在的接口都变化了,那我就讲下2020年怎么搞今日头条妹子写真,这是一个改进的项目,里面参加了我自己的很多想法,比如有些很难懂的,我自己用简单的方式去实现了它,个人感觉还是实现的不错的,各位看官可以看看。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

这么好看的妹子直接教你怎么搞到手!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

girls

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目介绍:

项目技术:

简单的进程池:

Ajax数据爬取:

项目作业:

最终作业效果图:

分析ajax接口获得数据:

数据包括:

第一点

第二点

第三点

获得数据

编写程序:

获得json文件:

获得标题和网址:

下载图片:

项目体会:

项目修复:

项目后记:

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目介绍

利用简单的进程池和Ajax数据爬取技术对今日头条关键词页面进行分析和处理,然后获取每个页面的链接,从而获得所有图片的链接,然后打包下载,

整个步骤我都会用小模块代码将其展示,实现不了的过来砍我! 就是这么的负责我跟你们说。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目技术

简单的进程池:

这里对进程的了解我也不是很多,简单的说下项目需要的函数:

from multiprocessing import Pool  # 调用函数库p = Pool(4)  #  构造一个进程池,单位为4p.close()  # 关闭进程p.join()  # 开启进程

对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

Ajax数据爬取

网址的很多信息都不会直接全部出现在源代码里面,比如你刷网页,那些新刷出的网页就是一个个的通过ajax接口加载出来的,这是一种异步加载方式,原始的页面不会包含很多数据,数据都放在一个个接口里面,只有我们请求这个ajax接口,然后服务器后台收到这个接口信息,才会把数据返回,然后JavaScript分析这个数据,在渲染到浏览器页面上,这就是我们看到的模式,

现在越来越多的网页都是采用这个异步加载的方式,爬虫就显得没那么容易了,这个概念的讲的也拗口,我们直接开始实战吧!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目作业

最终作业效果图:

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

分析ajax接口获得数据

数据包括:

每个页面的标题

每个页面的网址

目标网址: 今日头条关键词妹子

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

怎么知道他是不是ajax接口,主要有三点:

1

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

第一点

注意我这几个箭头,只要你在这里·查找·里面找不到与文章对应的文字还是链接什么的,那就可能是。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

2

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

第二点

在这个XHR里面找到箭头的网址,点击,查看预览,这个时候你随意打开里面的东西,就能发现很多与文章相同的点

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

3

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

第三点

还是这张图,你可以看到X-requested里面的接口是XMLHttpRequets

如果三点同时满足,那他就是Ajax接口,然后异步加载出来的数据。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

获得数据

在第二点的那张图我们可以看到有0,1,2,3,4,之类的,打开你会发现,都在这里面,图中我用箭头标红了,有标题和页面链接,只要获得这个页面链接,那么就很简单了。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

编写程序

获得json文件:

首先请求最开始的页面:

https://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3

但是我们不能这样直接把页面交给requests库直接干,因为这是一个ajax接口,如果不加入参数,很可能让你输入什么验证码还是拉动验证条什么,反正就是很麻烦,那我们就加入参数,具体措施如下:

defget_page(offset):# offset偏移,因为每个ajax都是加载固定的页面数# 这里是20,在第三点图上可以看得到globalheaders# 全局变量  我后面还要用    headers = {‘cookie’:’tt_webid=6821518909792273933; WEATHER_CITY=%E5%8C%97%E4%BA%AC; SLARDAR_WEB_ID=b4a776dd-f454-43c6-81cd-bd37cb5fd0ec; tt_webid=6821518909792273933; csrftoken=4a2a6afcc9de4484af87a2ff8cba0638; ttcid=8732e6def0484fae975c136222a44f4932; s_v_web_id=verify_k9o5qf2w_T0dyn2r8_X6CE_4egN_9OwH_CCxYltDKYSQj; __tasessionId=oxyt6axwv1588341559186; tt_scid=VF6tWUudJvebIzhQ.fYRgRk.JHpeP88S02weA943O6b6-7o36CstImgKj1M3tT3mab1b’,’user-agent’:’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 Edg/81.0.416.68′,’referer’:’https://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3′,’x-requested-with’:’XMLHttpRequest’}# 头信息 加入参数    params = {‘aid’:’ 24′,’app_name’:’ web_search’,’offset’: offset,’format’:’ json’,’keyword’:’ 美女’,’autoload’:’ true’,’count’:’ 20′,’en_qc’:’ 1′,’cur_tab’:’ 1′,’from’:’ search_tab’,’pd’:’ synthesis’,’timestamp’: int(time.time())    }url =’https://www.toutiao.com/api/search/content/?’+ urlencode(params)# 构造url, 使用到了urlencode() 函数 url = url.replace(‘=+’,’=’)# 这里必须注意现在的网址根本不一样# print(url)          try:        r = requests.get(url, headers=headers, params=params)r.content.decode(‘utf-8’)ifr.status_code ==200:returnr.json()# 返回json格式 因为全是字典类型exceptrequests.ConnectionErrorase:        print(e)

这里必须注意一点,请求的网址已经改掉了,我在代码里面给了解释,仔细看看。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

获得标题和网址

defget_image(json):# 获取图片ifjson.get(‘data’):# 如果这个存在foriteminjson.get(‘data’):ifitem.get(‘title’)isNone:continue# 如果标题是空值title = item.get(‘title’)# 获取标题ifitem.get(‘article_url’) ==None:continueurl_page = item.get(‘article_url’)# print(url_page)            rr = requests.get(url_page, headers=headers)ifrr.status_code ==200:pat ='<script>var BASE_DATA = .*?articleInfo:.*?content:(.*?)groupId.*?;</script>’#  用正则大致匹配一下范围                match = re.search(pat, rr.text, re.S)ifmatch !=None:result = re.findall(r’img src=\&quot;(.*?)\&quot;’, match.group(), re.S)#  print(i.encode(‘utf-8’).decode(‘unicode_escape’)# 转换编码方式 把u之类的改掉yield{‘title’: title,’image’: result                    }

这里获取的网页链接都是Unicode格式的,在后面的下载部分,我给了修改方案,这也是一个暗坑。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

下载图片

defsave_image(content):path =’D://今日头条美女//’# 目录ifnotos.path.exists(path):# 创建目录        os.mkdir(path)        os.chdir(path)else:        os.chdir(path)# ——————————————ifnotos.path.exists(content[‘title’]):# 创建单个文件夹if’t’incontent[‘title’]:# 以title为标题创建单个文件夹title = content[‘title’].replace(‘t’,”)# 去除特殊符号 不然创建不了文件名称os.mkdir(title +’//’)os.chdir(title +’//’)            print(title)else:title = content[‘title’]os.mkdir(title +’//’)# 创建文件夹os.chdir(title +’//’)            print(title)else:# 如果存在if’t’incontent[‘title’]:# 以title为标题创建单个文件夹title = content[‘title’].replace(‘t’,”)# 去除特殊符号 不然创建不了文件名称os.chdir(title +’//’)            print(title)else:title = content[‘title’]os.chdir(title +’//’)            print(title)forq, uinenumerate(content[‘image’]):# 遍历图片地址列表u = u.encode(‘utf-8’).decode(‘unicode_escape’)# 先编码在解码 获得需要的网址链接#  开始下载        r = requests.get(u, headers=headers)ifr.status_code ==200:# file_path = r'{0}/{1}.{2}’.format(‘美女’, q, ‘jpg’)  # 文件的名字和地址,用三目运算符来调试文件夹的名字# hexdisgest() 返回十六进制图片withopen(str(q) +’.jpg’,’wb’)asfw:                fw.write(r.content)print(f’该系列—–>下载{q}张’)

在U变量的时候进行了编码在解码操作,然后网址就正常很多了。

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目体会

之前爬虫项都是很简单的,这一次有点麻烦,总之,对于困难我们还是别怕,不会就百度,一直百度一定出结果!

项目修复:

正确的拼接网址,修复了data = None 的bug,在获得json文件里面得到了体现

加入必要的参数,避免了验证码和验证条的出现,这也很棒 =。=

进行编码解码操作, 修改了u格式下的链接不匹配问题,在获得网址的时候我也提到了

下载图片的时候使用了子文件夹的处理,让下载的图片不会那么杂乱

下载采用了简单的线程池问题,加快了下载的速度

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

七夕送小姐姐!女生勿扰,只适合男孩子的python爬虫!

项目后记

2020年,有所期待,向阳盛开!!

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/202701.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code