从0开始学爬虫8使用requests和beautifulsoup4爬取维基百科词条链接并存入数据库

Python使用requests和beautifulsoup4爬取维基百科词条链接并存入数据库

参考文档:

https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

# 安装 beautifulsoup4

(pytools) D:\python\pytools>pip install beautifulsoup4

安装mysql的模块

pymysql的地址:https://github.com/PyMySQL/PyMySQL

爬取维基百科词条

# coding=utf-8

from bs4 import BeautifulSoup
import requests
import re def spider_wike():
url = "https://en.wikipedia.org/wiki/Main_Page"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}
resp = requests.get(url, headers = headers)
# 将响应数据转换为utf-8编码
resp.encoding = 'utf-8' html_doc = resp.text soup = BeautifulSoup(html_doc, "html.parser")
# 找到以wiki开头的a标签的href属性
list_urls = soup.find_all("a", href=re.compile("^/wiki/"))
# print(list_urls) # 输出所有的词条对应的名称和URL
for url in list_urls:
# 过滤掉.jpg 或.JPG 结尾的URL
if not re.search(r"\.(jpg|JPG)", url["href"]):
# 词条加网址
# sting只能获取一个, get_text() 可以获取标签下所有的内容
print(url.get_text(), " <------>", "https://en.wikipedia.org" + url["href"]) if __name__ == '__main__':
spider_wike()

# 将维基百科词条链接存入数据库

# coding=utf-8

from bs4 import BeautifulSoup
import requests
import re
import pymysql.cursors '''
# 环境准备
pip install pymysql
create database wikiurl charset=utf8mb4;
use wikiurl;
create table urls (id int primary key auto_increment,urlname varchar(255),urlhref varchar(1000));
'''
url = "https://en.wikipedia.org/wiki/Main_Page"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}
resp = requests.get(url, headers = headers)
# 将响应数据转换为utf-8编码
resp.encoding = 'utf-8' html_doc = resp.text soup = BeautifulSoup(html_doc, "html.parser")
# 找到以wiki开头的a标签的href属性
list_urls = soup.find_all("a", href=re.compile("^/wiki/"))
# print(list_urls) # 输出所有的词条对应的名称和URL
for url in list_urls:
# 过滤掉.jpg 或.JPG 结尾的URL
if not re.search(r"\.(jpg|JPG)", url["href"]):
# 词条加网址
# sting只能获取一个, get_text() 可以获取标签下所有的内容
print(url.get_text(), " <------>", "https://en.wikipedia.org" + url["href"]) connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='wikiurl',
charset='utf8mb4')
try:
# 获取回话指针
with connection.cursor() as cursor:
# 创建sql语句
sql = "insert into `urls`(`urlname`,`urlhref`) values(%s,%s)" # 执行sql语句
cursor.execute(sql,(url.get_text(), "https://en.wikipedia.org" + url["href"]))
# 提交数据
connection.commit()
finally:
connection.close()

# 从数据库读取词条信息

# coding=utf-8

import pymysql

def get_conn():
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='wikiurl',
charset='utf8mb4')
return connection def get_wiki_data():
conn = get_conn() sql = "select `urlname`,`urlhref` from urls"
cur = conn.cursor()
# 获取总记录条数
count = cur.execute(sql)
print(count) # 获取所有数据
# urllists = cur.fetchall()
# 获取指定条目数据
# urllists = cur.fetchmany(3)
#
# for url in urllists:
# print(url[0],'<--->',url[1]) # 获取一条数据
link = cur.fetchone()
print(link) # 关闭数据库连接
conn.close() def get_data():
conn = get_conn() try:
with conn.cursor() as cur:
sql = "select `urlname`,`urlhref` from urls where `id` is not NULL"
count = cur.execute(sql)
print(count) # 查询所有数据
# data = cur.fetchall()
# print(data) # 查询指定条目数据
result = cur.fetchmany(size = 5)
print(result)
finally:
conn.close() if __name__ == '__main__':
# get_wiki_data()
get_data()

最新文章

  1. CSS float
  2. mybatic与spring结合的事务管理
  3. 利用nodejs搭建服务器,测试AJAX
  4. Django 之 分表
  5. 从头构建自己的Linux系统
  6. WIN7里为什么没有TELNET,怎么添加
  7. android操作sdcard中的多媒体文件(二)——音乐列表的更新
  8. tomcat安装不成功-提示找不到JAVA虚拟机
  9. 会话数据的保存——cookie
  10. HDU-4862-Jump
  11. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持多包扫描(六)
  12. Django 入门案例开发(中)
  13. sql server 2008 sql prompt 自动提示
  14. 【面试笔试算法】Program 6: 字符消除(hiho题库)
  15. Javascript我学之三函数的参数
  16. 如何在 Github 上发现优秀的开源项目?
  17. ChinaCock界面控件介绍-CCLoadingIndicator
  18. LeetCode题解 Permutations II 和 Permutations I ——回溯算法
  19. js正则表达式子校验
  20. sqlserver 数据迁移

热门文章

  1. 十大排序代码实现(python)
  2. springboot学习笔记(二)—— springboot的启动模式设置
  3. python 单元测试(unittest)
  4. test20190803 夏令营NOIP训练19
  5. Spark Streaming的原理
  6. vue自定义元素拖动
  7. mysql5.7的手动安装
  8. 第三节.vue.js属性与方法
  9. Linux 的磁盘格式化、挂载、磁盘检验、df、du、fdisk、free命令的使用
  10. 洛谷P1650赛马与codevs 2181 田忌赛马