python爬京东作业

基础知识我就不写了http://blog.csdn.net/gavin_chen929/article/details/53241976这篇博客有我就主要贴贴代码吧,我的python版本为3.5

建爬虫项目命名为jd建爬虫文件命名为jdsc

目录结构


编写item类(java习惯了不知道在item中是不是也可以这么叫啊)定义几个参数

标题

title=scrapy.Field()

#连接地址
link=scrapy.Field()

#价格
price=scrapy.Field()

#好评数
goodcomment=scrapy.Field()

#差萍数
PoorCountStr=scrapy.Field()

#追评数
AfterCountStr=scrapy.Field()

#总评论数
comment=scrapy.Field()

定义好参数后开始编写具体的操作实现


# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
from jd.items import JdItem
import urllib.request
import re

class JdscSpider(scrapy.Spider):
    name = "jdsc"
   
allowed_domains = ["XX.com"]
    start_urls = ['http://XX.com/']

    def parse(self,response):

#定义搜索关键字

        key="笔记本"
       
for iin range(0,100):

#循环收索的页面
            url="https://search.XX.com/Search?keyword="+str(key)+"&enc=utf-8&page="+str(1+2*i)

#传递url参数调用page函数
            yield Request(url=url,callback=self.page)
    def page(self,response):

#提取页面中某个元素的href属性(访问的url)
        url1=response.xpath("//div[@class='p-name p-name-type-2']/a/@href").extract()
        #循环url
       
for jin range(0,len(url1)):

#添加访问的https头(页面元素中没有https头确有//我没有去了所以在这加上https)
            urldata="https:"+str(url1[j])
            #传递urldata参数调用next函数
           
yield Request(url=urldata,callback=self.next)
    def next(self,response):

#实例话JdItem()
        item=JdItem()

#提取传过来的URL中的某个元素的值
        item["title"]=response.xpath("//div[@class='sku-name']/text()").extract()

#提取url
        item["link"]=response.url

#定义正则表达式规则(获取类似于商品id之类的商品唯一属性)
        pat = "https://XX.XX.com/(.*?).html"

#获取商品对应页面的唯一性属性
       
thisid=re.compile(pat).findall(response.url)[0]

#构建获取商品价格的url(这个地方的名字我定义错了comment应该换成price的导致后面我很多参数的名字都混了快哭了
        commenturl="https://XX.XX.XX/XX/mgets?callback=XX&skuIds=J_"+str(thisid)

#获取价格参数集(获取到的数有好几个好像是什么会员价市场价之类的)
        commentdata=urllib.request.urlopen(commenturl).read().decode("utf-8","ignore")

#定义正则表达式规则
        pate='"p":"(.*?)","m":'

#获取价格(价格是一个json的结果集)
       
item["price"]=re.compile(pate).findall(commentdata)

#构建商品评论数的url
        priceurl="https://xxx.xx.com/xx/xx.action?referenceIds="+str(thisid)+"&callback=xx"

#获取评论数结果集(结果集是json数据)
       
pricedata=urllib.request.urlopen(priceurl).read().decode("utf-8","ignore")

#定义获取好评数的正则表达式规则
        pricepategood='"GoodCount":(.*?),"AfterCount'

#获取好评数
       
item["goodcomment"]=re.compile(pricepategood).findall(pricedata)

#定义追评数的正则表达式规则
        priceafter='"AfterCount":(.*?),"AfterCountStr"'

#获取追评数
       
item["AfterCountStr"]=re.compile(priceafter).findall(pricedata)

#定义差评数的正则表达式规则
        PoorCountStrpat='"PoorCount":(.*?),"PoorRate"'

#获取差评数
       
item["PoorCountStr"]=re.compile(PoorCountStrpat).findall(pricedata)

#定义评论数的正则表达式规则
        commentpat='"CommentCount":(.*?),"AverageScore"'

#获取总的评论数(获取的数本来有些数据是一万为单位计数的我获取后万始终没看到所以就换了一种表达方式)
       
item["comment"]=re.compile(commentpat).findall(pricedata)
       
yield item
编写pipeline类

# -*- coding: utf-8 -*-
import pymysql


class JdPipeline(object):
    def __init__(self):

#定义连接数据库
        self.conn = pymysql.connect(host="localhost",user="root",passwd="YY",db="cs",port=3306,charset='utf8')
    def process_item(self, item,spider):

#try处理异常
        try:

    #获取商品名称
            title=item["title"][0]
            link=item["link"]
            price=item["price"][0]
            comment=item["comment"][0]
            goodcomment=item["goodcomment"][0]
            PoorCountStr=item["PoorCountStr"][0]
            AfterCountStr=item["AfterCountStr"][0]

    #拼接插入mysql数据库的sql语句
            sql = "insert into jd(title,link,price,comment,goodcomment,poorcountstr,aftercount) values('"+title+"','"+link+"','"+price+"','"+comment+"','"+goodcomment+"','"+PoorCountStr+"','"+AfterCountStr+"')"

    #执行sql
            self.conn.query(sql)

    #提交sql
            self.conn.commit()
           
return item
        except Exceptionas err:
            pass
    def
close_spider(self):

#这里本来可以不用提交的不过发现这里不提交的话好多异常数据显示不知道是什么原因(希望大神给我解答一下)
        self.conn.commit()
#关闭数据库连接
        self.conn.close()


到这里一个小个爬虫项目就完成了



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值