实验一:网络数据采集实验
一,实验目的
网络爬虫系统的功能是下载网页数据,为搜索引擎系统或需要网络数据的企业提供数据来源。本章内容介绍了网络爬虫程序的编写方法,主要包括如何请求网页以及如何解析网页。在网页请求环节,需要注意的是,一些网站设置了反爬机制,会导致我们爬取网页失败。在网页解析环节,我们可以灵活运用BeautifulSoup提供的各种方法获取我们需要的数据。同时,为了减少程序开发工作量,可以选择包括Scrapy在内的一些网络爬虫开发框架编写网络网络爬虫程序。
二,实验要求
1.1 采集网页数据保存到文本文件
访问古诗文网站(https://so.gushiwen.org/mingju/),会显示如图3-5所示的页面,里面包含了很多名句,点击某一个名句(比如“山有木兮木有枝,心悦君兮君不知”),就会出现完整的古诗(如图3-6所示)
1.2 采集网页数据保存到MySQL数据库
编写网络爬虫程序,读取网页内容进行解析,并把解析后的数据保存到MySQL数据库中,
1.3 XPath语言
了解Xpath的基本术语及语法
三,实验步骤
1.1 采集网页数据保存到文本文件
下面编写网络爬虫程序,爬取名句页面的内容,保存到一个文本文件中,然后,再爬取每个名句的完整古诗页面,把完整古诗保存到一个文本文件中。可以打开一个浏览器,访问要爬取的网页,然后在浏览器中查看网页源代码,找到诗句内容所在的位置,总结出它们共同的特征,就可以将它们全部提取出来了。
import requests
from bs4 import BeautifulSoup
import time
#函数1:请求网页
def page_request(url,ua):
response = requests.get(url,headers = ua)
html = response.content.decode('utf-8')
return html
#函数2:解析网页
def page_parse(html):
soup = BeautifulSoup(html,'html.parser')
title = soup('title')
sentence = soup.select('div.left > div.sons > div.cont > a:nth-of-type(1)')
poet = soup.select('div.left > div.sons > div.cont > a:nth-of-type(2)')
sentence_list=[]
href_list=[]
for i in range(len(sentence)):
temp = sentence[i].get_text()+ "---"+poet[i].get_text()
sentence_list.append(temp)
href = sentence[i].get('href')
href_list.append("https://so.gushiwen.org"+href)
return [href_list,sentence_list]
#函数3:写入文本文件
def save_txt(info_list):
import json
with open(r'D:\\sentence.txt','a',encoding='utf-8') as txt_file:
for element in info_list[1]:
txt_file.write(json.dumps(element,ensure_ascii=False)+'\n\n')
#子网页处理函数:进入并解析子网页/请求子网页
def sub_page_request(info_list):
subpage_urls = info_list[0]
ua = {