已有184人关注
这个多进程实例是不是没写完啊?
发表在Python图书答疑 2020-09-16 《Python实效编程百例·综合卷》第2章 网络爬虫 45页-50页
是否精华
版块置顶:

运行完全正常,耗时也短,但是数据库没有存储一条数据呀?

if __name__ == "__main__":
    print('开始了!')
    current = time.time()
    total_page_count = get_json(1)["result"]["query"]["totlePageCount"]
    pool = Pool()
    index = ([x for x in range(1, total_page_count+1)])
    # print(index,total_page_count)
    pool.map(mian, index)
    pool.close()
    pool.join()
    cur.close()
    conn.commit()
    conn.close()
    print('执行结束')
    end = time.time()
    print(f'执行时间一共为{end - current}秒!')



还有44页也是,书上少了一句迭代代码,害我执行半天,终于找出来了,老师们可以看一下书本,下面这句书本44页没有

# for index in range(1, total_page_count+1):
#     mian(index)



2020-09-16 23:29:26编辑
分享到:
精彩评论 5
andy
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2020-09-17
沙发

感谢指正错误

hollok
学分:144 LV3
2020-09-17
板凳

andy 发表于2020-09-17 08:52

感谢指正错误

可是,你没有解决我的问题呀,多进程怎么往数据库储存数据?我debug代码都执行了,结果数据库为空,老师帮忙指正一下啊

andy
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2020-09-18
地板

hollok 发表于2020-09-17 19:38

可是,你没有解决我的问题呀,多进程怎么往数据库储存数据?我debug代码都执行了,结果数据库为空,老师帮忙指正一下啊

为了防止course_id 重复,请新增一个id字段。令id作为主键,SQL语句如下:

CREATE TABLE `course` (

`id` int(8) AUTO_INCREMENT PRIMARY KEY,

  `course_id` bigint(20) NOT NULL,

  `product_id` bigint(20) NOT NULL,

  `product_type` int(11) NOT NULL,

  `product_name` varchar(125) NOT NULL,

  `provider` varchar(125) NOT NULL,

  `score` float DEFAULT NULL,

  `score_level` int(11) DEFAULT NULL,

  `learner_count` int(11) DEFAULT NULL,

  `lesson_count` int(11) DEFAULT NULL,

  `lector_name` varchar(125) DEFAULT NULL,

  `original_price` float DEFAULT NULL,

  `discount_price` float DEFAULT NULL,

  `discount_rate` float DEFAULT NULL,

  `img_url` varchar(125) DEFAULT NULL,

  `big_img_url` varchar(125) DEFAULT NULL,

  `description` text

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


此外,需要注意爬取的数据要与数据表中的字段一一对应。

hollok
学分:144 LV3
2020-09-28
4L

andy 发表于2020-09-18 16:48

为了防止course_id 重复,请新增一个id字段。令id作为主键,SQL语句如下:

CREATE TABLE `course` (

`id` int(8) AUTO_INCREMENT PRIMARY KEY,

  `course_id` bigint(20) NOT NULL,

  `product_id` bigint(20) NOT NULL,

  `product_type` int(11) NOT NULL,

  `product_name` varchar(125) NOT NULL,

  `provider` varchar(125) NOT NULL,

  `score` float DEFAULT NULL,

  `score_level` int(11) DEFAULT NULL,

  `learner_count` int(11) DEFAULT NULL,

  `lesson_count` int(11) DEFAULT NULL,

  `lector_name` varchar(125) DEFAULT NULL,

  `original_price` float DEFAULT NULL,

  `discount_price` float DEFAULT NULL,

  `discount_rate` float DEFAULT NULL,

  `img_url` varchar(125) DEFAULT NULL,

  `big_img_url` varchar(125) DEFAULT NULL,

  `description` text

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


此外,需要注意爬取的数据要与数据表中的字段一一对应。

这个我已自行解决了,但是我就是不明白为什么那样执行,数据库没有东西,但是id却自增了(多进程执行后,改单进程执行),正常存储数据id是从1开始的,假如我多进程执行3次,数据库还是空空如也,改单进程,数据库有数据,id是从3000多开始自增

andy
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2020-10-09
5L

hollok 发表于2020-09-28 21:25

这个我已自行解决了,但是我就是不明白为什么那样执行,数据库没有东西,但是id却自增了(多进程执行后,改单进程执行),正常存储数据id是从1开始的,假如我多进程执行3次,数据库还是空空如也,改单进程,数据库有数据,id是从3000多开始自增

  1. 使用多进程时,首先检查获取到的数据是否正常,可以在mysql中手动执行插入操作,看下能否插入成功。

  2. id如果设置为自增,每次会在原来的基础上增加,即使删除前面的数据,也是一样。

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照