爬虫进阶实战(标价1000的单子)

前言

这次这个单子是别人做不了然后我接手的。说实话,一开始看到任务我以为我运气好捡漏了,后来才发现。

这个网站的反爬技术真的不错,这个没点水平还真的解决不了。而我恰恰是业余爱好者,就是那种没点技术水平的。还早后来我剑走偏锋,爬了两天两夜终于把这个任务交付了。

这里就想把这个剑走偏锋的方法贴出来,然后供大家参考,给大家反爬提供一个别样的思路。

项目需求

这次的任务是这个网站:WebNovel

这个网站是美国的应该,需要一点科学手段才能访问。

客户给了个csv文件,里面包含了目标小说的书名。

在这里插入图片描述

最终的要求就是把表格内的所有小说的章节目录爬下来。包括书名,书的ID,章节ID,章节更新时间,是否是VIP章节等信息。

在这里插入图片描述

注意:目标不是小说内容,是目录。

看起来是个非常简单的任务是吧,后面有坑的,这个网站的。

一、分析目标页面

我们首先随便打开一个小说的主页。

在这里插入图片描述

关注到这样几个信息

  • 链接的规则
  • 目标章节目录的位置。

很明显昂,每个页面链接的规则非常简单,网站主页地址加上book/小说名字_长数字字符ID

这个目录章节本来我以为我要用selinum自动化去点击这个按钮才能显示章节目录呢,但是其实你在链接后面加个\catalog就能直接进入章节目录的界面。

至于我为什么能发现,F12就能看到哈:

在这里插入图片描述

直接通过链接进入章节目录,这种简单的解析页面就不讲了。

在这里插入图片描述

二、信心满满的准备

当时我用了半个小时左右吧,分析了下任务,甚至把所有目标小说的链接爬了下来。

这里就放一个关键代码吧。

url ='https://www.webnovel.com/search?keywords='+name
# name就是书名
r = requests.get(url, headers=headers, proxies = proxies)
html = r.content.decode('utf-8', 'ignore')
my_page = BeautifulSoup(html, 'lxml')
tag=my_page.find_all('li', class_="pr pb20 mb12")[0]

title=tag.a.attrs['title']
row.append(title)
href=tag.a.attrs['href']
row.append(href)

循环爬完之后的结果:

在这里插入图片描述

然后我这一看,不用试了,跟客户吹牛逼说,两天。

两天主要考虑到两方面,一方面是1000块钱我总不能说给我俩小时。另一方面是,可能在爬的时候遇到bug让自己立于不败之地。

  • 后来果然出事了

三、惨遭滑铁卢

我没想到啊,真的没想到。这个小小的comming soon卡了我一天。

在这里插入图片描述

中途我尝试过各种方法去解决这个问题,因为我也是个业余的大家看个笑话就好:

1.selinum自动化,延迟几秒等他反应过来。

但是把基本上现在的网站都有反爬机制,显示出这个,然后就会有很多人机验证或者直接不把数据给你给出来。

这里就是第二种,你不管怎么点,都是不会把数据给你的,一直comming soon

在这里插入图片描述

2.尝试查询资料,解决这个识别问题。

结果查阅资料,我发现了这个识别其实是selinum自己给自己的一个限制。也就是说通过一定的手段,可以解决的。通过执行一个自己创建的js文件,修改几个配置变量,就能让浏览器或者后台把他作为正常的请求。

很明显,我的水平不够,没解决。

以后解决了再贴出来。

3.requests_html的render等待。

我在查阅资料(指csdn、掘金、百度、google的病急乱投医),看到了这样的一个代码。本着试试也不吃亏的态度试了下。

from requests_html import HTMLSession

def open_url(url):
    headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0'}
    session = HTMLSession()
    resp = session.get(url, headers=headers)
    resp.html.render(timeout=20)
    return resp.html.html

这个方法最后也没成功。

而此时,因为当时有个妹子乱我道心,导致我码代码效率低下。时间只剩下一天了。

四、返璞归真,大巧不工

其实,反爬机制就是通过鉴别爬虫和正常访问的区别从而禁止爬虫的访问。而反反爬技术就是尽量把自己的爬虫伪装成正常的访问。

所以这个时候我悟了,我用浏览器直接访问页面,网站终究会给我最终的章节信息。

我当时直接ctrl+s确实也能通过保存下来的html文件解析出章节目录信息。所以思路很清晰了。

网站不会拒绝正常的访问,而最正常的访问就是直接打开链接。

所以我们需要的是一个自动打开链接的工具,和一个自动保存的工具。

1.自动打开链接:

这个就是自动打开链接的方法,完全正常访问,不会防备的那种。

import webbrowser
webbrowser.open_new_tab(url)

2.自动保存页面:

这个东西,真的python处理不了,因为毕竟那个页面打开后也不想selinum那样还被python的库控制着,所以,我找了个插件Save Page WE

在这里插入图片描述

在这里插入图片描述

这个就是能够自动保存界面,还支持延迟,自动关闭页面。正好完美的符合我们的需求。

五、开始执行

后面有完整的代码,他的逻辑很好理解昂

1. 自动打开界面

中间用sleep延迟了下,因为要给网站反应的时间

2. Save Page WE自动保存页面

3. 查看下载目录是否多了一个html文件

import webbrowser
import csv
import time
import os
csv_file=csv.reader(open('url.csv','r',encoding='utf-8'))
sum=0
error=[]
pre=0
#295
for line in csv_file:
    if pre<1187:#444 /book/forsaken-core_17161136306825805
        pre+=1
    else:
        print(pre,line[2],end=' ')
        url ='https://www.webnovel.com'+line[2]+'/catalog'
        webbrowser.open_new_tab(url)
        time.sleep(8)
        while 1:
            path = "C:/Users/Dave-Cui/Downloads/"
            fileList = os.listdir(path)  # 待修改文件夹
            os.chdir(path)  # 将当前工作目录修改为待修改文件夹的位置
            num = 0  # 名称变量
            for fileName in fileList:  # 遍历文件夹中所有文件
                if fileName.endswith(".html"):
                    num += 1
            if num-pre==1:
                pre=num
                time.sleep(5)
                print(pre,'成功!')
                break


当天晚上,我的电脑真的一直忽明忽暗的。然后一共是三千多个html文件,后面就是解析html文件了。

这个解析和我们request.get获取到的解析是完全一致的,只是获取需要

with open (filename,"r","utf-8") as f:
    html=f.read()
    my_page = BeautifulSoup(html, 'lxml')

剩下的解析这里不多哔哔了。

个人总结:

这里也算是给大家提供一个爬虫的新思路供大家参考。其实算是很笨的方法,但是挺有用的。

后续可能会把这一套封装好,毕竟谁也不想那个页面不停的开开关关的,在这期间严重影响电脑的使用。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值