抓取动态网页(简单写一下用selenium处理动态加载页面相关的知识。)
优采云 发布时间: 2021-12-17 17:08抓取动态网页(简单写一下用selenium处理动态加载页面相关的知识。)
自学python爬虫快半年了。目前我面临着三个爬虫技术需要解决的问题:动态加载、多线程并发爬取、模拟登录。目前,我正在不断学习相关知识。下面简单写一下用selenium动态加载页面的相关知识。目标-抓取页面上所有的高考成绩信息。
对于动态加载,当我一开始看到Selenium+Phantomjs的强大时,直接学会了这个。打开网页查看网页源代码(不是查看元素),会发现要爬取的信息不在源代码中。也就是说,无法从网页的源代码中解析得到数据。Selenium+Phantomjs 的强大之处在于能够捕获完整的源代码并上传代码。
from selenium import webdriver
def get_grade(url):
print(url)
#匿名爬虫
#假定9999端口开启tor服务
service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
driver = webdriver.PhantomJS(executable_path=这里是PhantomJS的绝对路径)
driver.get(url)
data = driver.page_source
print(data)
get("http://gkcx.eol.cn/soudaxue/queryProvince.html?page=1")
这里也用到了匿名爬虫,这里我只是在可以使用的级别,具体原理还不是很了解。. . 这样获取完整的源代码是不是很容易?当然很简单,但是简单的代价是牺牲了速度。
这个程序并不太复杂。爬行量大的时候,模拟爬行的效率会变得很低(不是多线程的……不知道多线程能不能加快速度)。下面是这个项目的完整代码:
import xlsxwriter
from selenium import webdriver
from bs4 import BeautifulSoup
def get_grade(url):
print(url)
#匿名爬虫
#假定9999端口开启tor服务
service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]
driver = webdriver.PhantomJS(executable_path=r"F:\Techonolgoy\Python\file\spider\spider_tools\JS\1\phantomjs.exe")
driver.get(url)
data = driver.page_source
# print(data)
soup = BeautifulSoup(data, 'lxml')
grades = soup.find_all('tr')
for grade in grades:
global i
if '' in str(grade):
i += 1
print(i)
grade_text =grade.get_text()
print(grade_text)
grade_text = str(grade_text)
city = grade_text[:-13]
worksheet.write(i,0,city)
time = grade_text[-13:-9]
worksheet.write(i,1,time)
subs = grade_text[-9:-7]
worksheet.write(i,2,subs)
s = grade_text[-7:-3]
worksheet.write(i,3,s)
grade = grade_text[-3:]
worksheet.write(i,4,grade)
i = -1
workbook = xlsxwriter.Workbook('grades.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A',10)
worksheet.set_column('B:B', 10)
worksheet.set_column('C:C', 10)
worksheet.set_column('D:D', 10)
worksheet.set_column('E:E', 10)
urls = ['http://gkcx.eol.cn/soudaxue/queryProvince.html?page='+str(num)
for num in range(1,166)]
for url in urls:
get_grade(url)
workbook.close()
家里网速太慢,20分钟就爬完了。. . 捕获的EXCEL文件格式如下:
被这次模拟抓到的乌龟的速度折磨够了,于是在大牛们的指点下,找到了另一种处理这类问题的方法——直接问json文件获取数据!下面写这个。