mywang88

2018-12-14

简介

由于项目需要,计划抓取 dblp 网站关键词搜索结果的文章列表。

目标站点:dblp: computer science bibliography 以及文章所属期刊网站

维基词条:DBLP - Wkikpedia

1 流程设计

  • 从需求方获取“关键词列表”。
  • 在 DBLP 主页,使用关键词列表中的每个关键词,发起搜索。
  • 获取搜索结果页面中,每个条目(文章)的详细信息,包括文章链接。
  • 提取信息,存入数据库文章表。
  • 获取文章表中的文章链接,访问文章页面。
  • 从文章页面中解析出更多信息,例如 Abstract 等,更新文章信息中的对应字段。
  • 由于不同文章往往属于不同站点,需要给每个对应站点编写单独的解析方法。

2 主要工具

  • Python 解释器,版本 3.7.0

    官网:https://www.python.org/

  • 最好有个 Python 的编辑器(例如 notepad++)或者 IDE(例如 PyCharm)

  • Scrapy 爬虫框架,版本 1.5.1

    官网:https://scrapy.org/

  • Google Chrome 浏览器,版本 71.0.3578.98(正式版本) (64 位)

  • MySQL 数据库。

  • 其它 Python 工具包,例如 pymysql,json 等。

  • Scrapy 和其它 Python 工具包都可以使用 pip 命令安装。

3 项目实施

3.1 创建爬虫项目

  • 提前安装好 scrapy 框架。
  • 在命令行模式下进入一个准备好的文件夹。
  • 创建一个 scrapy 项目。
scrapy startproject project_name
  • 进入项目文件夹,使用 scrapy genspider 指令创建一个 spider 爬虫。
cd project_name
scrapy genspider dblp domain.com
  • 一个爬虫实际上是一个类,一个 scrapy.spider 类的子类。
  • 在爬虫文件中定义 start_requestparse 等方法。

3.2 获取关键词列表

  • 从需求方获取关键词列表。
  • 本项目中,关键词列表存放于 MySQL 数据库中。
  • Python 的 pymysql 工具包用来与 MySQL 数据库通信。
# 爬虫文件
import scrapy
import pymysql
import jsonclass DblpSpider(scrapy.Spider):name = 'dblp'def start_request(self):# 建立连接conn = pymysql.connect(host='192.168.1.8',port=3306,user='mywang88',password='hahahaha',db='dblp')cur = conn.cursor()# 构造查询语句sql = 'SELECT keyword FROM table_name'# 执行查询语句cur.execute(sql)# 提取查询结果word_list = list(cur.fetchall())# 关闭连接conn.close()

3.3 构造搜索结果 url ,提交请求

  • 本项目中,dblp 对于关键词搜索提供了直接将搜索结果导出为 json 格式的服务。
  • 其它类型的搜索,即非关键词搜索,似乎没有这个服务。
  • 关键词对应的 json 数据的 url 是这样构造的:
 for keyword in word_list:# 构造 urlurl = 'https://dblp.uni-trier.de/search/publ/api?q='url += keyword[0]url += '&h=1000&format=json'# 创建 scrapy.Request 实例req = scrapy.Request(url=url,callback=self.parse)yield req# 请求会被提交给 scrapy 框架的请求队列# 完成请求会返回一个 scrapy.Response 对象,传递给 parse 函数

3.4 解析搜索结果

  • 向构造的 url 发送 GET 请求,获取响应。
  • 使用 json 工具包来加载响应的 json 数据:
 def parse(self, response):result = json.loads(response.text)
  • 这是一个字典对象,结果存放在这个路径下:
     tips = result['result']['hits']['hit']
  • 这是一个列表对象,每篇文章对应列表中的一个字典对象。
  • 字典中的'info'字段存放了文章的详细信息。
  • 以篇为单位,将文章详细信息存入 MySQL 数据库中,其中包括文章的 url 。
  • 至此,第一阶段完成。

3.5 后续工作

  • 新创建一个爬虫。
  • SELECT 已经抓取并存入数据库的文章。
  • 通过文章 url 访问文章所属期刊网站上的文章页面。
  • 从文章页面中解析更多文章的详细信息并 UPDATE 数据库。
  • 需要针对每个不同的站点,开发出不同的解析函数(parser)
  • 根据 response.url 的不同,调用不同的解析函数来提取信息。
  • 解析函数中可使用 scc 与 xpath 选择器提高效率。

4 小结

本想写一篇技术文,实现过程中却发现项目太简单,后续工作又太繁琐,先写到这里吧。

好吧,这是一篇科普文。

综上,本文介绍了爬虫项目中的几种常用工具。

整个项目的源代码就不贴了,好多文件的… 有兴趣的小伙伴可以留言。

DBLP 搜索爬虫项目相关推荐

  1. python爬虫项目-32个Python爬虫实战项目,满足你的项目慌

    原标题:32个Python爬虫实战项目,满足你的项目慌 爬虫项目名称及简介 一些项目名称涉及企业名词,小编用拼写代替 1.[WechatSogou]- weixin公众号爬虫.基于weixin公众号爬 ...

  2. python爬虫项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  3. python爬虫项目-32个Python爬虫项目让你一次吃到撑

    今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- ...

  4. python爬虫项目-23个Python爬虫开源项目代码

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  5. python爬虫新手项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  6. python爬虫教程推荐-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  7. post获取重定向的链接 python_欧美音乐网站Python爬虫项目实战

    爬虫项目实战 0x01 目标分析 最近发现一个比较好的欧美音乐下载网站,可以下载大部分高质量欧美音乐.该爬虫项目要实现自动化批量获取用户想要下载的音乐.本文从网站分析.爬虫设计.代码实现三个方面出发, ...

  8. 自己帮别人写的网站可以公开源码吗_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...

    写在前面 你想成为Python爬虫的高手么?你想爬取你想要的高质量数据么? 那么你得需要进行爬虫项目的演练,那样你才有可能在Python爬虫的道路上走的更远 小编在这里精心总结了20个爬虫项目的演练, ...

  9. 32个Python爬虫项目

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

最新文章

  1. ASP.NET获取任意网页HTML代码
  2. Mendix:低代码平台四大常见用例开发
  3. 计算机英语初级考试时间,2020年考研考试时间安排及考试科目_考研网
  4. ubuntu18.04 中个性化配置vim方法
  5. 从数据库导出数为生成excel表
  6. 检查密码 (15 分)
  7. 谷歌约束控件(ConstraintLayout)扁平化布局入门
  8. Excel可视化图表模板,图表控的你快收藏呀!!!
  9. 持久层框架有哪些?区别是什么?Mybatis框架的优点和缺点
  10. TabLyout结合ViewPage
  11. rk3288 android4.4,RK3288 Android4.4使用A6212,wifi可以用但是蓝牙起不来
  12. 关于C语言中自增自减
  13. 基于冲突的搜索算法(CBS)个人笔记
  14. C++ vector数据合并去除重复项
  15. Dubbo之——Dubbo服务集群
  16. [转]我在赶集网的两个月 7.4(完结)
  17. 如何看待这份2018互联网校招高薪清单?(谷歌阿里腾讯华为网易)
  18. lcg_magic算法笔记:快速排序
  19. vue原生小球抛物线 仿优信二手车
  20. ERP之工单应发料数

热门文章

  1. 波哥!一个不安分的IT男
  2. 各种奇奇怪怪的编码,究竟怎么来的?
  3. BT TWS方案开发感悟
  4. 2023年江苏省赛事网络空间安全理论题库
  5. Struts2介绍(一个大的工具库)
  6. tcp连接之半连接攻击和全连接攻击总结
  7. 备份恢复的种类以及完全恢复实验
  8. web3创业合伙人招募!!!
  9. 中国科学技术大学计算机2020,中国科学技术大学2020年第七届计算机科学暑期夏令营报名通知...
  10. 联邦学习实战-2-用FATE从零实现横向逻辑回归