中间很长一段时间,由于各种原因,没有时间继续学习Python。
最近为了捡起Python,我开始不断锻炼自己的爬虫技术——爬取各种网页信息。
一直苦恼于网页登录时各种验证码的处理,感觉无从下手,可能是因为自己太过业余吧,哈哈……
对于审计人员来说,工作中需要经常查询企业信息,为了方便快捷地获取我们想要的企业信息,我一直在思考如何用Python去爬取各大企业信息查询网站。
其实,这个爬虫有很多大佬已经研究出来了,可能也算不上什么高大上的操作技能,而且有一些企业信息查询网站也支持批量查询,但是我还是想利用自己的业余时间把这个爬虫亲自写出来。
当然,也遇到了诸多问题。比如,爬取天眼查网站登录时的滑动验证码。
最终在本猴的不断研究与琢磨中,这个问题被解决了。
解决方案:
基于cookie绕过验证码自动登录
首先使用selenium手动登录一下,然后获取cookie值保存到本地,之后再登陆的时候直接调用本地cookie就可以了。这样就可以完美地绕过验证码自动登录!
获取cookie的过程就不在这赘述了,小编从来只关心结果。
下面以天眼查为例,开始我们的操作。
把我们需要查询企业的全称依次写入excel模板的A列,见下图:
然后运行以下代码:
from selenium import webdriverfrom time import sleepimport jsonfrom lxml import etreefrom openpyxl import workbookfrom openpyxl import load_workbook#填写webdriver的保存目录driver = webdriver.Chrome()driver.maximize_window()#记得写完整的url 包括http和httpsdriver.get('https://www.tianyancha.com/search?')#首先清除由于浏览器打开已有的cookiesdriver.delete_all_cookies()with open('cookies.txt','r') as cookief: #使用json读取cookies 注意读取的是文件 所以用load而不是loads cookieslist = json.load(cookief) # 方法1 将expiry类型变为int for cookie in cookieslist: #并不是所有cookie都含有expiry 所以要用dict的get方法来获取 if isinstance(cookie.get('expiry'), float): cookie['expiry'] = int(cookie['expiry']) driver.add_cookie(cookie)#刷新页面driver.refresh()#打开excelwb=load_workbook('数据.xlsx')ws=wb['Sheet1']for i in range(2,ws.max_row+1): driver.find_element_by_id("header-company-search").clear() driver.find_element_by_id("header-company-search").send_keys(ws.cell(i,1).value) driver.find_element_by_xpath('//div[@]').click() sleep(1) driver.find_element_by_xpath('//a[@tyc-event-ch="CompanySearch.Company"]').click() sleep(1) driver.switch_to_window(driver.window_handles[1]) source=driver.page_source html=etree.HTML(source) name=html.xpath('//h1[@]') zczb=html.xpath('//td[@]/div') sjzb=html.xpath('//td[@width=""]') zcdz=html.xpath('//div[@style="max-height:16px;"]/div') jyfw=html.xpath('//td[@colspan="4"]/span') #写入excel ws.cell(i,2).value=zczb[0].text ws.cell(i,3).value=sjzb[0].text ws.cell(i,4).value=zczb[1].text ws.cell(i,5).value=sjzb[1].text ws.cell(i,6).value=zcdz[0].text ws.cell(i,7).value=jyfw[0].text driver.close() driver.switch_to_window(driver.window_handles[0]) sleep(1)#保存excelwb.save('数据.xlsx')
运行如下:
计算机全自动操作网页
酷不酷?!
运行结束,打开excel模板,最终结果如下:
这样我们就可以很轻松地获取到企业信息,如果想要获取企业其他信息,可以通过修改代码来实现,前提是要有一定的编程基础。
其实刚才爬取的信息即使不用登录也一样可以获取到,但是有些信息必须登陆之后才可以获取,所以小编还是利用一定的技术实现登录之后再来爬取相关信息。
喜欢小编的文章或者想更多了解小编的话
可以扫一扫关注小编的个人公众号
(关注即领取Python全套视频教程)
小编微信