本项目用是scrapy框架,以爬取当当网商品信息为例,详细介绍scrapy使用。
本项目把爬到的数据放入数据库中,title与link为字符串格式,价格与评论数为浮点型,方便筛选。
首先:新建dangpjt项目
scrapy startproject dangpjt
新建后可以看到如下框架;
首先填写item信息:
修改原有代码为:
import scrapy
class DangpjtItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#商品名称
name = scrapy.Field()
#价格
price = scrapy.Field()
商品链接
link = scrapy.Field()
商品评论数
consum = scrapy.Field()
# pass
其次,修改
把原代码修改为:
import pymysql
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
class DangpjtPipeline(object):
def __init__(self):
#连接数据库passwd自己填写
self.conn=pymysql.connect(host='localhost',user='root',passwd='*****',db='class',charset='utf8')
def process_item(self, item, spider):
conn1=self.conn.cursor()
name=item["name"]
price=item["price"]
link = item["link"]
consum = item["consum"]
#遍历列表,储存每个数据
for i in range(0,len(name)):
try:
#修改各自格式
price1=price[i]
price1=float(price1[1:-3])
name1 = name[i]
if len(name1)>19:
name1=name1[0:19]
link1=link[i]
consum1=consum[i]
consum1=float(consum1[:-3])
sql="insert into file (title,price,link,consum) values ('%s','%s','%s','%s')"%(name1,price1,link1,consum1)
conn1.execute(sql)
self.conn.commit()
except Exception as e :
#接收错误
print(e)
return item
def close_spider(self,spider):
conn1.close()
self.conn.close()
继续修改setting内容:
robotstxt协议,取消注释。修改为false
(仅做参考,鼓励大家遵守协议)
爬取时间间隔,可以不改(非必要选项)
不留下cookies,不留痕迹。
模拟浏览器访问。
这里一定要启用。很关键。
结束