python简单模拟站内搜索引擎第一步(创建数据集)

为了模拟购物网站的站内搜索引擎,需要建立数据集。我们先去抓取jd的部分图书数据。

#!/usr/bin/env python3 

import urllib.request
from bs4 import BeautifulSoup
from lxml import etree
import pymysql


def get_url(content):
    xml =  etree.HTML(content)
    book_url = xml.xpath('//div[@class="gl-i-wrap j-sku-item"]/div[@class="p-name"]/a/@href')
    return book_url

def get_name(content):
    xml =  etree.HTML(content)
    book_name = xml.xpath('//div[@class="gl-i-wrap j-sku-item"]/div[@class="p-name"]/a/em/text()')
    return book_name

def get_page():
    url='https://list.jd.com/list.html?cat=1713,3258,3297&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main'
    html = urllib.request.urlopen(url)
    content = html.read().decode('utf-8')
    xml =  etree.HTML(content)
    html.close()
    page_num=xml.xpath('//div[@class="page clearfix"]/div[@class="p-wrap"]/span[@class="p-skip"]/em/b/text()')
    return page_num

def main():
    db = pymysql.connect('***,'**','***','jd',charset="utf8")
    page_num=get_page()
    total_page= int(''.join(page_num))+1
    #循环抓取198页数据并写入数据库
    page = 1
    while page <total_page:
        url='https://list.jd.com/list.html?cat=1713,3258,3297&='+str(page)+'&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main'
        html = urllib.request.urlopen(url)
        content = html.read().decode('utf-8')
        url_list=get_url(content)
        name_list=get_name(content)
        #将第一页数据并写入数据库
        num=0
        while num< len(name_list):
            bookname = name_list[num]
            jdurl = url_list[num]
            cursor =db.cursor()
            sql ="insert into book (bookname,jdurl) values ('%s','%s')"%(bookname,jdurl)
            try:
                cursor.execute(sql)
                db.commit()
            except:
                db.rollback()
            num += 1
        page += 1


if __name__ =='__main__':
    main()
    print('ok')
#数据库名字jd
#数据库表名字
#create table book(
#id int primary key auto_increment,bookname text,jdurl text) 
#character set utf8;

利用xpath快速抓取想要的书名 以及对应的url,保存在数据库。

接下来就是对输入的搜索内容进行处理,将在下一篇进行处理。或者也可以去抓取豆瓣的读书评论,生成一个情感词图。稍后补上。

猜你喜欢

转载自blog.csdn.net/weixin_42532882/article/details/81226015