需求:
1.爬取情话网站中表白里面的所有句子(表白词_表白的话_表白句子情话大全_情话网)
2.利用XPath来进行解析
3.使用面向对象形发请求——创建一个类
4.将爬取下来的数据保存在数据库中
写出对应解析语法
//div[@class="box labelbox"]/h4/a/@href
如此照推,详情页文本对应的解析语法
//div[@class="stbody "]//p[1]/text()|//div[@class="stbody first"]//p[1]/text()
示例代码:
import requests
from lxml import etree
import pymysql
#面向对象发请求 1.创建一个类
class Spiderqinghua():
def __init__(self):
self.url ='http://www.ainicr.cn/qh/t8.html'
self.headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
#建立与MySQL的连接
self.db = pymysql.connect(user='root',password='wx990826',database='pingping')
self.cursor=self.db.cursor()#获取操作游标
def get_data(self,url):
r = requests.get(url=url,headers=self.headers)
return r.text
def get_list_data(self,data):#列表页
#//div[@class="box labelbox"]/h4/a/@href
xml=etree.HTML(data)
hrefs = xml.xpath('//div[@class="box labelbox"]/h4/a/@href')
# print(hrefs)
return hrefs
def parse_data(self,data):#详情页
xml=etree.HTML(data)
content = xml.xpath('//div[@class="stbody "]//p[1]/text()|//div[@class="stbody first"]//p[1]/text()')
for contents in content:
print('文本:',contents)
print('=====================')
self.save_data(contents)
def save_data(self,qinghua):
sql = 'insert into qinghua_data(text) value ("%s")'
self.cursor.execute(sql,[qinghua])#执行sql语句
self.db.commit()#提交
def main(self):
html_data=self.get_data(self.url)
hrefs = self.get_list_data(html_data)
for href in hrefs:
print('详情页连接:',href)
x_data = self.get_data(href)
# print(x_data)
self.parse_data(x_data)
#//div[@class="stbody "]//p[1]/text()|//div[@class="stbody first"]//p[1]/text()
if __name__ == '__main__':
spider=Spiderqinghua()
spider.main()
# h = spider.get_data()
# # print(h)
# spider.get_list_data(h)
运行结果: