抓取动态网页(简单写一下用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文件获取数据!下面写这个。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线