码迷,mamicode.com
首页 > 其他好文 > 详细

91家纺网,四次更新

时间:2020-06-29 18:51:16      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:urllib   import   from   list   next   sts   销售   处理   split   

"""
抓取
解析
存储
"""
import re
#import ast
from urllib import parse
from datetime import datetime

import requests
from scrapy import Selector

from models import *

domain = "http://www.91jf.com/"

#函数用来保存写入测试文本

def write_txt(html_data):
    f = open("a.txt", ‘w‘)
    f.write(html_data)
    f.close()

def get_nodes_json():
    left_menu_text = requests.get("http://www.91jf.com/").text
    #write_txt(left_menu_text)
    #etree.HTML(res0.text)
    sel = Selector(text=left_menu_text)
    all_divs = sel.xpath("//div[@class=‘class_child_li‘]//a[@href]").extract()
    if all_divs:
        nodes_lists = []
        for i in range(len(all_divs)):
            nodes_str = all_divs[i]
            nodes_str = nodes_str.replace("&","&")#此处&由于被转义成&导致需要重新进行处理
            nodes_lists.append(nodes_str)
        return nodes_lists
    return []

url_list_names = []
def process_nodes_list(nodes_list):
    #将js的格式提取出url到list中
    for item in nodes_list:
        #此处为对应的url数据
        url = re.search(‘\".*\d\"‘, item)
        url = url.group(0).replace("\"", "")
        url = parse.urljoin(domain,url)
        #此处为url对应的商品标签
        name = re.search(‘<span>.*</span>‘,item)
        name = name.group(0).replace("<span>","")
        name = name.replace("</span>","")
        url_list_name = [url,name]
        url_list_names.append(url_list_name)
    return url_list_names

def get_level1_list(nodes_list):
    level1_url = []
    #将js的格式提取出url到list中
    for item in nodes_list:
        #此处为对应的url数据
        url = re.search(‘\".*\d\"‘, item)
        url = url.group(0).replace("\"", "")
        url1 = parse.urljoin(domain,url + "&okey=salenum&order=desc&page=1")
        level1_url.append(url1)
    return level1_url

def get_last_urls():
    #获取最终需要抓取的url
    nodes_list = get_nodes_json()
    url_names = process_nodes_list(nodes_list)
    level1_url = get_level1_list(nodes_list)
    return level1_url

def parse_product(url):
    #获取商品的详情以及销售数量
    res_text = requests.get(url).text
    #print(res_text)
    sel = Selector(text=res_text)
    all_divs = sel.xpath("//div[@class=‘row row-2 title‘]/a/text()").extract()
    print(all_divs)
    ‘‘‘
    topic_item = all_divs[0]
    content = topic_item.xpath(".//div[@class=‘post_body post_body_min_h‘]").extract()[0]
    praised_nums = topic_item.xpath(".//label[@class=‘red_praise digg‘]//em/text()").extract()[0]
    jtl_str = topic_item.xpath(".//div[@class=‘close_topic‘]/text()").extract()[0]
    jtl = 0
    jtl_match = re.search("(\d+)%", jtl_str)
    if jtl_match:
        jtl = int(jtl_match.group(1))
    existed_topics = Topic.select().where(Topic.id == topic_id)
    if existed_topics:
        topic = existed_topics[0]
        topic.content = content
        topic.jtl = jtl
        topic.praised_nums = praised_nums
        topic.save()

    for answer_item in all_divs[1:]:
        answer = Answer()
        answer.topic_id = topic_id
        author_info = answer_item.xpath(".//div[@class=‘nick_name‘]//a[1]/@href").extract()[0]
        author_id = author_info.split("/")[-1]
        create_time = answer_item.xpath(".//label[@class=‘date_time‘]/text()").extract()[0]
        create_time = datetime.strptime(create_time, "%Y-%m-%d %H:%M:%S")
        answer.author = author_id
        answer.create_time = create_time
        praised_nums = topic_item.xpath(".//label[@class=‘red_praise digg‘]//em/text()").extract()[0]
        answer.parised_nums = int(praised_nums)
        content = topic_item.xpath(".//div[@class=‘post_body post_body_min_h‘]").extract()[0]
        answer.content = content

        answer.save()

    next_page = sel.xpath("//a[@class=‘pageliststy next_page‘]/@href").extract()
    if next_page:
        next_url = parse.urljoin(domain, next_page[0])
        parse_product(next_url)
    ‘‘‘

if __name__ == "__main__":
    last_urls = get_last_urls()
    for url in last_urls:
        parse_product(url)
    #print(last_urls)

91家纺网,四次更新

标签:urllib   import   from   list   next   sts   销售   处理   split   

原文地址:https://www.cnblogs.com/dog-and-cat/p/13209525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!