Python爬虫实现使用beautifulSoup4爬取名言网功能案例


Posted in Python onSeptember 15, 2019

本文实例讲述了Python爬虫实现使用beautifulSoup4爬取名言网功能。分享给大家供大家参考,具体如下:

爬取名言网top10标签对应的名言,并存储到mysql中,字段(名言,作者,标签)

#! /usr/bin/python3
# -*- coding:utf-8 -*-
from urllib.request import urlopen as open
from bs4 import BeautifulSoup
import re
import pymysql
def find_top_ten(url):
  response = open(url)
  bs = BeautifulSoup(response,'html.parser')
  tags = bs.select('span.tag-item a')
  top_ten_href = [tag.get('href') for tag in tags]
  top_ten_tag = [tag.text for tag in tags]
  # print(top_ten_href)
  # print(top_ten_tag)
  return top_ten_href
def insert_into_mysql(records):
  con = pymysql.connect(host='localhost',user='root',password='root',database='quotes',charset='utf8',port=3306)
  cursor = con.cursor()
  sql = "insert into quotes(content,author,tags) values(%s,%s,%s)"
  for record in records:
    cursor.execute(sql, record)
  con.commit()
  cursor.close()
  con.close()
# http://quotes.toscrape.com/tag/love/
#要获取对应标签中所有的名言 所以这里要考虑分页的情况
#经过在网页上查看知道分页查询的url
#http://quotes.toscrape.com/tag/love/page/1/
#判断到那一页没有数据 div.container div.row [1]
def find_link_content(link):
  page = 1
  while True:
    new_link = "http://quotes.toscrape.com" + link + "page/"
    # print(new_link)
    new_link = new_link + str(page)
    print(new_link)
    sub_bs = open(new_link)
    sub_bs = BeautifulSoup(sub_bs,'html.parser')
    quotes = sub_bs.select('div.row div.col-md-8 span.text')
    # 如果没有数据就退出
    if len(quotes) == 0:
      break
    #名言
    quotes = [quote.text.strip('“”') for quote in quotes]
    #作者
    authors = sub_bs.select('small.author')
    authors = [author.text for author in authors]
    # 标签
    tags_list = sub_bs.select('meta.keywords')
    tags_list = [tags.get('content') for tags in tags_list]
    # print(authors)
    # print(quotes)
    #print(tags_list)
    record_list = []
    for i in range(len(quotes)):
      tags = tags_list[i]
      tags = tags.replace(',',',')
      print(tags)
      record = [quotes[i],authors[i],tags]
      record_list.append(record)
    insert_into_mysql(record_list)
    page += 1
#
def main():
  url = "http://quotes.toscrape.com/"
  parent_link = find_top_ten(url)
  for link in parent_link:
    print(link)
    find_link_content(link)
if __name__ == '__main__':
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python自动调用IE打开某个网站的方法
Jun 03 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
详解Django 中是否使用时区的区别
Jun 14 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
python aiohttp的使用详解
Jun 20 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python 如何对文件目录操作
Jul 10 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
Python机器学习之底层实现KNN
Jun 20 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 #Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 #Python
Python数据库小程序源代码
Sep 15 #Python
python中树与树的表示知识点总结
Sep 14 #Python
python树的同构学习笔记
Sep 14 #Python
python图形绘制奥运五环实例讲解
Sep 14 #Python
python列表插入append(), extend(), insert()用法详解
Sep 14 #Python
You might like
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
php简单统计在线人数的方法
2016/05/10 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
放弃继承权公证书
2015/01/23 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
基督教追悼会答谢词
2015/09/29 职场文书