Python 爬虫20题精讲丨【生长吧!Python】

网友投稿 601 2022-05-30

爬虫

编程题

1.请使用正则(regular expression module)模块're'从一段中英文的字符串取得所有电话号码,其中电话号码可变,s="This is our Chinese homepage.我们公司的客服电话:02-2511-6530.若要购买商品编号为:05-1423,请来电0928837577." import re s="This is our Chinese homepage.我们公司的客服电话:02-2511-6530.若要购买商品编号为:05-1423,请来电0928837577." new_s = re.sub(r"-","",s) phone_num_list = re.findall(r'\d{10}', new_s) print(phone_num_list)

2.如何用python抓取京东网站某个类品下商品的图片,写上思路,关键点和对应的 反爬策略有可能有变化,现在是能跑通的 # https://www.jd.com/ # https://search.jd.com/Search?keyword=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&enc=utf-8&wq=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&pvid=9585617222944822b7039b975c89c7f1 # https://search.jd.com/Search?keyword=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&page=3&s=53&click=0 # https://search.jd.com/Search?keyword=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&enc=utf-8&wq=iphone%E5%90%88%E7%BA%A6%E6%9C%BA&page=1 3 """ http://list.jd.com/list.html?cat=9987,653,655 http://list.jd.com/list.html?cat=9987,653,655&page=2

""" import re import urllib.request def craw(url, page): html1 = urllib.request.urlopen(url).read() # fhandle = open('D:/爬虫/抓取文件/'+"jingdong1106"+str(page)+".html", "wb") # fhandle.write(html1) # fhandle.close() html1 = str(html1) pat1 = '
' result1 = re.compile(pat1).findall(html1) result1 = str(result1) # result1=result1[0] pat2 = '

理论简答题

1.简述一下爬虫的步骤 答案: 1. 确定需求(人) 2. 确定资源(人) 3. 通过URL获取网站的返回信息(爬虫) 4. 定位数据(爬虫) 5. 存储数据(程序)

2.遇到反爬机制怎么处理 答案: 反爬机制(headers): 1. 判断User-Agent 2. 判断Referer 3. 判断Cookie 如果以上操作还是没有成功爬取页面,就用将浏览器中的全部头信息放进来 注意:如果把全部headers拿过来的话记得把Accept-Encoding: gzip, deflate注释掉

3.进程与线程的关系? 答案: 进程如一个车间,线程如车间内的一条流水线;创建进程需要申请特别的内存空间(车间),各进程间是竞争关系,所以创建进程的开销大;而多个线程属于同一个进程 (车间),线程间共享进程中的资源,属于合作关系,所以创建线程开销小。所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线 程才是cpu上的执行单位.

4.遇到过哪些反爬的案例,分别是如何解决的(不限一种 答案: 1. BAN USERAGENT很多的爬虫请求头就是默认的一些很明显的爬虫头python-requests/2.18.4,诸如此类,当运维人员发现携带有这类headers的数据包,直接拒绝访 问,返回403错误 解决方法:直接r=requests.get(url,headers={‘User-Agent':'Baiduspider'})把爬虫请求headers伪装成百度爬虫或者其他浏览器头就行了。 拓展: BAN REFERER 西刺代理,今日头条 2. BAN IP:网页的运维人员通过分析日志发现最近某一个IP访问量特别特别大,某一段时间内访问了无数次的网页,则运维人员判断此种访问行为并非正常人的行为,于 是直接在服务器上封杀了此人IP。 解决方法:此种方法极其容易误伤其他正常用户,因为某一片区域的其他用户可能有着相同的IP,导致服务器少了许多正常用户的访问,所以一般运维人员不会通过此种 方法来限制爬虫。不过面对许多大量的访问,服务器还是会偶尔把该IP放入黑名单,过一段时间再将其放出来,但我们可以通过分布式爬虫以及购买代理IP也能很好的解 决,只不过爬虫的成本提高了。 boss 直聘,伯乐在线 3. BAN COOKIES:服务器对每一个访问网页的人都set-cookie,给其一个cookies,当该cookies访问超过某一个阀值时就BAN掉该COOKIE,过一段时间再放出来,当然一 般爬虫都是不带COOKIE进行访问的,可是网页上有一部分内容如新浪微博是需要用户登录才能查看更多内容。 解决办法:控制访问速度,或者某些需要登录的如新浪微博,在某宝上买多个账号,生成多个cookies,在每一次访问时带上cookies 需要登录才能访问的网站,拉勾网等 4. 验证码验证:当某一用户访问次数过多后,就自动让请求跳转到一个验证码页面,只有在输入正确的验证码之后才能继续访问网站 解决办法:python可以通过一些第三方库如(pytesser,PIL)来对验证码进行处理,识别出正确的验证码,复杂的验证码可以通过机器学习让爬虫自动识别复杂验证码, 让程序自动识别验证码并自动输入验证码继续抓取 微信公众号文章爬取,豆瓣登录等 5. javascript渲染:网页开发者将重要信息放在网页中但不写入html标签中,而浏览器会自动渲染