js提取指定网站内容(爬虫学哪个库好?Python爬虫库对比分析(一))

优采云 发布时间: 2021-12-25 08:17

  js提取指定网站内容(爬虫学哪个库好?Python爬虫库对比分析(一))

  读者经常在哪个图书馆学习爬虫?其实常用的Python爬虫库无非是requests、selenium和scrapy,每个库都有自己的特点。对我来说,没有最推荐的库,只有最合适的库。本文将基于一个简单的爬虫案例(Python爬取起点中文网站)对三个库进行对比分析(从时间角度)

  

  目标需求是批量采集排名书信息,如下图:

  

  页面结构易于分析。排行榜有100本书信息,一个静态页面收录20条数据。使用不同的第三方库来分析和提取数据,它们是:

  然后在逻辑代码的开头和结尾加上时间戳,得到程序运行时间,比较效率。

  这里,因为xpath是用来提取数据的,所以xpath语句的三种方式是类似的,这里先对数据分析做一下说明:

  

  1. imgLink: //div[@class='book-img-text']/ul/li/div[1]/a/@href

2. title: //div[@class='book-img-text']/ul/li//div[2]/h4/a/text()

3. author: //div[@class='book-img-text']/ul/li/div[2]/p[1]/a[1]/text()

4. intro: //div[@class='book-img-text']/ul/li/div[2]/p[2]/text()

5. update://div[@class='book-img-text']/ul/li/div[2]/p[3]/a/text()

  一、请求

  首先导入相关库

  from lxml import etree

import requests

import time

  逻辑代码如下

  start = time.time() # 开始计时⏲

url = 'https://www.qidian.com/rank/yuepiao?style=1&page=1'

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'

}

page = requests.get(url,headers=headers)

html = etree.HTML(page.content.decode('utf-8'))

books = html.xpath("//div[@class='book-img-text']/ul/li")

for book in books:

imglink = 'https:' + book.xpath("./div[1]/a/@href")[0]

# 其它信息xpath提取,这里省略 ....

update = book.xpath("./div[2]/p[3]/a/text()")[0]

print(imglink,title,author,intro,update)

end = time.time() # 结束计时⏲

print(end-start)

  程序运行结果如下

  

  可以看到爬下所有数据需要0.823s。

  二、 硒

  首先导入相关库

  import time

from selenium import webdriver

  代码实现如下

  url = 'https://www.qidian.com/rank/yuepiao?style=1&page=1'

start = time.time() # 开始计时⏲

driver = webdriver.Chrome()

driver.get(url)

books = driver.find_elements_by_xpath("//div[@class='book-img-text']/ul/li")

for book in books:

imglink = 'https:' + book.find_element_by_xpath("./div[1]/a").get_attribute('href')

# 其它小说信息的定位提取语句,...

update = book.find_element_by_xpath("./div[2]/p[3]/a").text

print(imglink,title,author,intro,update)

end = time.time() # 结束计时⏲

print(end-start)

# 18.564752340316772

  运行结果如下

  

  可以看到时间是18.8174s

  三、Scrapy

  最后是Scrapy的实现,代码如下

  import scrapy

import time

class QdSpider(scrapy.Spider):

name = 'qd'

allowed_domains = ['qidian.com']

start_urls = ['https://www.qidian.com/rank/yuepiao?style=1&page=1']

def parse(self, response):

start = time.time() # 开始计时⏲

books = response.xpath("//div[@class='book-img-text']/ul/li")

for book in books:

imglink = 'https:' + book.xpath("./div[1]/a/@href").extract_first()

# 其它信息的xpath提取语句,......

update = book.xpath("./div[2]/p[3]/a/text()").extract_first()

print(imglink, title, author, intro, update)

end = time.time() # 结束计时⏲

print(end - start)

  运行结果如下

  

  可以看到运行时间只用了0.016s

  四、结果分析

  从代码量来看:其实代码量没有太大区别,因为实现逻辑比较简单。

  但是在运行时间方面:scrapy最快,只需要不到0.02s,selenium最慢,需要将近20s,运行效率是scrapy的1/1000。但是,与 requests 和 selenium 相比,在 scrapy 中开发和调试代码需要更长的时间。

  我正在仔细研究原因

  ”

  requests:请求模拟浏览器请求。下载请求的网页内容后,不会执行js代码。

  为什么 selenium 最慢:首先,Selenium 是 Web 应用程序的自动化测试工具。Selenium 测试直接在浏览器中运行(支持多种浏览器,Google、Firefox 等)来模拟用户操作来获取网页渲染。导致selenium解析并执行网页的CSS和js代码,效率低下。

  scrapy框架的爬取效率最高:首先,和requests一样,scrapy不执行web js代码,但是我们知道scrapy是一个提取结构化数据的应用框架。Scrapy 使用了 Twisted 异步 web 框架,可以加快我们的下载速度。, 并发性好,性能高,所以效率最高。

  ”

  五、补充

  通过上面的简单测试,我们可能会觉得selenium效率太低了。是不是因为数据采集在selenium中不常用?只能说,在可以爬取数据的前提下,采集 高效的方法会是首选。

  所以这篇文章的目的不是要说明不要使用selenium。接下来我们来看看招聘网站--拉勾招聘页面数据采集。随机选择一个帖子java,页面如下:

  

  5.1 请求实现

  如果您使用 requests 来请求数据

  

  你会发现没有数据,网页已经进行了反爬虫处理。这时候硒就派上用场了。无需分析网站反爬方法,直接模拟用户请求数据(大多数情况下也有反硒反爬方法)。攀登手段)

  5.2 selenium 实现

  上面提到,如果你使用requests或者scrapy爬虫来寻找反爬虫的措施,你可以试试selenium,这个有时候很简单

  from selenium import webdriver

url = 'https://www.lagou.com/zhaopin/Java/?labelWords=label'

driver = webdriver.Chrome()

driver.get(url)

items = driver.find_elements_by_xpath("//ul[@class='item_con_list']/li")

print(len(items))

for item in items:

title = item.find_element_by_xpath("./div[1]/div[1]/div[1]/a/h3").text

print(title)

  运行结果如下:

  

  页面的数据很容易提取!

  因此,根据本文的案例分析,如果有爬虫需求,在某一个方法中冻结该方法并不是一个好的选择。大多数情况下,我们需要根据对应网站/app的特点和具体需求进行集成判断,选择最合适的爬虫库!

  ,

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线