使用XPath爬取起点网

使用XPath简单爬取起点网并将数据存入MySQL数据库
import requests#pip3 install requests
from lxml import etree#pip3 install lxml
import time
import re
import pymysql#pip3 install PyMySQL

def db():
    #连接数据库
    conn = pymysql.connect(host='localhost',port=3306,user='root',database='数据库名',password='数据库密码',charset='utf8')
    print('连接上数据库了')
    return conn
def insertdb0(conn,data0):
    #创建光标
    cursor = conn.cursor()
    #SQL语句
    sql = """
        INSERT INTO qidian1(%s) VALUE(%s)
    """%(','.join([k for k,v in data0.items()]),
    ','.join(['%s' for k,v in data0.items()]),
    )
    # print([v for k,v in data0.items()])
    # print([k for k,v in data0.items()])
    try:
        cursor.execute(sql,[v for k,v in data0.items()])
        conn.commit()
    except:
        print('失败')
        conn.rollback()

def insertdb1(conn,data1):
    cursor = conn.cursor()
    sql = """
        INSERT INTO info_parse(%s) VALUE(%s)
    """%(','.join([k for k,v in data1.items()]),
    ','.join(['%s' for k,v in data1.items()]),
    )
    try:
        cursor.execute(sql,[v for k,v in data1.items()])
        conn.commit()
    except:
        print('失败')
        conn.rollback()

def insertdb2(conn,data2):
    cursor = conn.cursor()
    sql = """
        INSERT INTO content_parse(%s) VALUE(%s)
    """%(','.join([k for k,v in data2.items()]),
    ','.join(['%s' for k,v in data2.items()]),
    )
    try:
        cursor.execute(sql,[v for k,v in data2.items()])
        conn.commit()
    except:
        print('失败')
        conn.rollback()

#内容页面的URL
def content_url(ctx1):
    for k,v in ctx1.items():
        # print(v)
        src = 'https:{}'.format(v)
        # print(src)
        # time.sleep(5)
        content_parse(src)
#使用正则解析内容页面
def content_parse(src):
    # print(src)
    req_headers = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'Host': 'read.qidian.com',
    }
    response = requests.get(src,headers=req_headers)
    # print(response.text)
    #匹配内容
    content1 = re.compile(r'.*?<div.*?class="read-content j_readContent">(.*?)</div>.*?',re.S)
    sult = re.findall(content1,response.text)[0]
    # print(sult)
    #替换内容的\n
    content2 = re.sub(r"<[^>]*>|&nbsp;|\n","",sult)
    # print(content2)
    data2 = {
        'content2':content2
    }
    conn = db()
    insertdb2(conn,data2)

    

#信息页URL
def info_url(ctx):
    # print(ctx)
    for k,v in ctx.items():
        # print(v)
        src = 'https:{}'.format(v)
        # print(src)
        info_parse(src)
#信息页URL解析,XPath提取数据
def info_parse(src):
    # print(src)
    req_headers = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'Host': 'book.qidian.com',
    }
    response = requests.get(src,headers=req_headers)
    # print(response.text)
    xml2 = etree.HTML(response.text)
    # print(xml2)
    zong = xml2.xpath('//div[@class="volume-wrap"][1]/div[@class="volume"]/ul[@class="cf"]/li')
    # print(len(zong))
    for i in zong:
        href = i.xpath('./a/@href')[0]
        # print(href)
        data1 = {
            'href':href
        }
        conn = db()
        insertdb1(conn,data1)
        time.sleep(2)
        ctx1 = {
            'href':href
        }
        
        content_url(ctx1)
        

#首页页面,使用XPath提取数据
def qidian_index():
    url = 'https://www.qidian.com/all'
    req_headers = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }
    response = requests.get(url,headers=req_headers)
    # print(response.text)
    print(response.url)
    xml1 = etree.HTML(response.text)
    # print(xml1)
    #图片封面
    img = xml1.xpath('//div[@class="book-img-box"]/a/img/@src')
    # print(img)
    zong = xml1.xpath('//div[@class="book-mid-info"]')
    for i in zong:
        
        #标题
        title = i.xpath('./h4/a/text()')[0]
        # print(title)
        #作者
        zuozhe = i.xpath('./p/a[1]/text()')[0]
        # print(zuozhe)
        fenlei1 = i.xpath('./p/a[2]/text()')[0]
        # print(fenlei)
        fenlei2 = i.xpath('./p/a[3]/text()')[0]
        # print(fenlei2)
        #分类
        # fenlei = fenlei1 + '.' + fenlei2
        fenlei = '{}.{}'.format(fenlei1,fenlei2)
        # print(fenlei)
        #内容
        content = i.xpath('./p/text()')[0].strip()
        # print('*'*100)
        # print(content)
        src_cover = i.xpath('./h4/a/@href')[0]
        # print(src_cover)
        
        data0 = {
            'title':title,
            'zuozhe':zuozhe,
            'fenlei':fenlei,
            'content':content,
        }
        conn = db()
        insertdb0(conn,data0)
        # time.sleep(2)
        ctx = {
            'src_cover':src_cover
        }
        
        info_url(ctx)



if __name__ == '__main__':
    qidian_index()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,916评论 2 89
  • 看完了电影《当幸福来敲门》。百般滋味在心头。 故事是讲述了一位叫克里斯的男人,在工作和生活中遇到了麻烦。他代理的测...
    凌小妖阅读 140评论 0 1
  • 你睁开最温柔的眼睛 目光逐人间浮灯流水前行 追到容川的海 亲吻搁浅的鲸 泡沫都为你相聚 融化透明 你住在最温柔的梦...
    冬星抱寒阅读 269评论 1 8
  • 树根为药芽亦药,根为毒芽何用说?唯随善恶意差别,不随善恶像大小。 人们总是更看重行为和语言,其实真正主宰我们行为和...
    雪莲芬芳H阅读 3,785评论 63 66
  • 前期的几个事情: (1)、千万别舍不得投入,在前期多投入,没有关系,把关系建立好了,自然就好了。 (2)、要“敢一...
    笑曰阅读 150评论 0 0