为了模拟购物网站的站内搜索引擎,需要建立数据集。我们先去抓取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,保存在数据库。
接下来就是对输入的搜索内容进行处理,将在下一篇进行处理。或者也可以去抓取豆瓣的读书评论,生成一个情感词图。稍后补上。