爬虫进阶(四)

总第71篇

01|背景:

前段时间给人填报志愿,无意间发现这个网站的:http://gkcx.eol.cn/soudaxue/queryschoolgufen.html,这个网站整体不错,会根据生源地、高考分数、和文理科来推荐一些可以报考的学校,但是使用不是很方便,不可以设置多个条件(比如我想把东三省的学校挑出来),只能一个省份一个去点击。再比如我想要录取概率在50%以上的学校,同样也做不到,要是能下载excel中的话可以多条件筛选的,平日里学的爬虫终于派上用场了。

但是在爬取的过程中发现了一个问题在审查元素中存在的内容但在网页源代码中不存在,所以通过request请求得到的response内容中也不存在,导致我们最后在用find_all查找的时候结果为空,于是乎就各种百度终于找到了解决方案,原来是因为我们要查找的数据是通过AJAX来加载的。关于js数据的获取,发现一篇前人写的很不错的文章,现在贴出来:https://sanwen8.cn/p/46fgV6R.html

在之前也写过一篇关于AJAX加载的数据,上次那一篇是直接通过查找XHR中来获取js数据:爬虫进阶(一),这次我们用selenium来获取js数据。

02|明确爬虫目的:

我想要爬取该网站的学校名字、学校类别、报该学校的风险大小以及录取概率。

03|获取目标url:

该网站的网页构成还是相对简单,由基础的网页域名+一些参数就是目标url。这里有一个重点内容是将字符串转化为url参数,需要利用urlencode.

base="http://gkcx.eol.cn/soudaxue/queryschoolgufen.html"for i in range(1,10):  #这里的10根据结果页数来调整
    data={        
        "mark":450,
        "fsxxxS":"山西",        
        "examineeType":"理科",       
        "page":i
    }
    dated=urllib.parse.urlencode(data)
    url=base+"?"+dated

这里的mark(分数)、fsxxxs(生源地)、examineeType(文科or理科)均可以修改。

04|请求目标url:

这里因为我们需要的数据是通过AJAX加载的,利用request请求不能够直接得到我们想要的内容(我们想要的数据未加载出来),这里我们利用selenium模拟浏览器让网页数据全部加载完成(包括我们想要的数据)。

browser = webdriver.Chrome()#创建一个浏览器对象
browser.get(url)
html=browser.page_source#将selenium加载出来的网页内容传递给html

05|解析selenium所获得的内容:

这里我们还是借助Beautifulsoup库来进行解析。

soup = BeautifulSoup(html,'lxml')

06|获取我们需要的内容:

这里我们利用正则表达式来获取我们所需要的内容。需要注意的是re.search的被匹配内容需要是字符串,所以用str将soup列表中的内容转化。

soup1=soup.find_all("tr")
for m in range(1,len(soup1),2):
‍    result=re.search("<a.*?title=.*?>(\S+)</a>.*?<span>(\S+)</span>.*?<span class=.*?>(\S+)</span>(\S+)</td>",str(soup1[m]))
    school.append(result.group(1))
    category.append(result.group(2))
    risk.append(result.group(3))
    probability.append(result.group(4))‍

school、category、risk、probability是用来存放对应值而建立的空列表。最后将这些列表利用pandas进行合并导出为excel即可。可以参考下文:

房天下数据爬取及简单数据分析

07|本篇的一些重点:

1)将字符串urlencode成url参数。
2)利用selenium对js数据进行加载。
3)利用正则表达式取出想要的多个内容。

Python爬虫进阶涉及到一些高级技术和技巧,以下是一些你可以学习和探索的主题: 1. 多线程和多进程:使用多线程或多进程可以提高爬虫的效率,同时处理多个请求或任务。 2. 使用代理:在爬取网页时,你可能会被网站封禁IP,使用代理可以轮流切换IP地址来规避封禁。 3. 反反爬虫策略:有些网站会采取一些手段防止爬虫,你需要学习如何识别和应对这些策略,比如验证码、页面解密等。 4. 使用Cookie和Session:有些网站会使用Cookie和Session来验证用户身份,你需要学习如何在爬虫中模拟登录和保持会话状态。 5. 使用数据库:将爬取到的数据存储到数据库中可以方便后续的数据分析和处理。 6. 使用框架和库:学习使用一些流行的爬虫框架和库,比如Scrapy、BeautifulSoup、Requests等,可以大大简化爬虫的开发和管理。 7. 高级数据解析和提取:学习使用正则表达式、XPath、CSS选择器等高级技术来解析和提取网页中的数据。 8. 动态网页爬取:学习使用Selenium等工具来爬取动态生成的网页内容,比如通过JavaScript异步加载的数据。 9. 分布式爬虫:学习如何构建分布式爬虫系统,可以提高爬取效率和可靠性。 10. 爬虫的合法性和道德问题:学习了解相关法律法规和伦理道德,确保你的爬虫行为合法合规。 这些都是Python爬虫进阶的一些方向,你可以根据自己的兴趣和需求选择学习的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俊红的数据分析之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值