这次爬取的确实有些坎坷,经过了两个晚上吧,最后一个晚上还是爬取数据到最后一公里了,突然报错了。又得继续重新进行爬取


先来个爬取结果图,这次爬取的是标题,url,还有日期,估计也就只有这么多内容,用的单线程,

爬取结果:

爬取的过程很蛋疼,最后是昨天晚上爬取出来的,下次争取不用单线程进行任务了。

先来份代码:

# -*- coding: UTF-8 -*-
import threading  # 导入threading包
from lxml import etree
import requests
import re
import chardet
from  openpyxl import Workbook
import time
# 脚本之家baseUrl = 'http://www.jb51.net/list/list_97_1.htm'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'}pageNum = 1  # 用来计算爬取的页数
wb = Workbook()
ws = wb.active
ws.title = '脚本之家脚本python专栏'
ws.cell(row=1, column=1).value = '标题'
ws.cell(row=1, column=2).value = '链接'
ws.cell(row=1, column=3).value = '日期'def getHtml(url):req = requests.get(url, headers)# print('html:'+req.text.encode(req.encoding).decode('gb2312'))return req.text.encode(req.encoding).decode('gb2312')def etreeMyHtml(html):global pageNumprint('******' * 40)html = etree.HTML(html)result = etree.tostring(html, pretty_print=True, encoding='gb2312')# 因为每页有四十页for page in range(1, 41):# 标题title = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/a/text()' % page)# 日期timeData = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/span/text()' % page)# 链接(因为用的是相对链接,所以要加上:http://www.jb51.net)nextUrl = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/a/@href' % page)print('str1=== ' + str(title[0]))print('timeData=== ' + str(timeData[0]))nextUrl = 'http://www.jb51.net' + nextUrl[0]print('nextUrl=== ' + str(nextUrl))# ver_info = list(zip(title[0],nextUrl,timeData[0]))pageNum = pageNum + 1ws.cell(row=pageNum, column=1).value = title[0]ws.cell(row=pageNum, column=2).value = nextUrlws.cell(row=pageNum, column=3).value = timeData[0]# print('中文')
# data = getHtml(baseUrl)
# etreeMyHtml(data)
# print('中文')def start(page1,page2):try:for i in range(page1, page2):mUrl = 'http://www.jb51.net/list/list_97_%s.htm' % iprint('url ' + mUrl)data = getHtml(mUrl)etreeMyHtml(data)except:print('error '+i)finally:wb.save('脚本之家脚本python专栏' + '.xlsx')def task1():print('task1 start...')start(1,71)
def task2():print('task2  init...')start(71,153)# print("多线程:")
# starttime = time.time();  # 记录开始时间
# threads = []  # 创建一个线程列表,用于存放需要执行的子线程
# t1 = threading.Thread(target=task1)  # 创建第一个子线程,子线程的任务是调用task1函数,注意函数名后不能有()
# threads.append(t1)  # 将这个子线程添加到线程列表中
# t2 = threading.Thread(target=task2)  # 创建第二个子线程
# threads.append(t2)  # 将这个子线程添加到线程列表中
#
# for t in threads:  # 遍历线程列表
#     t.setDaemon(True)  # 将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起
#     t.start()  # 启动子线程
# endtime = time.time();  # 记录程序结束时间
# totaltime = endtime - starttime;  # 计算程序执行耗时
# print("耗时:{0:.5f}秒".format(totaltime));  # 格式输出耗时
# print('---------------------------')# 以下为普通的单线程执行过程,不需解释
print("单线程:")
starttime = time.time();
start(1,153)
endtime = time.time();
totaltime = endtime - starttime;
print("耗时:{0:.5f}秒".format(totaltime));

总结一下:

遇到的坑:脚本之家的编码是gb2312,首次使用xpath,用完感觉还不错,比正则耗时少了,主要是直接浏览器F2,然后选中元素右键copy->xpath 就可以了, 而且上一篇文章写的很清楚,也比较容易入门

  1. 得到源网页:
def getHtml(url):req = requests.get(url, headers)# print('html:'+req.text.encode(req.encoding).decode('gb2312'))return req.text.encode(req.encoding).decode('gb2312')
  • 通过xpath进行相应的数据进行解析
def etreeMyHtml(html):global pageNumprint('******' * 40)html = etree.HTML(html)# result = etree.tostring(html, pretty_print=True, encoding='gb2312')# 因为每页有四十页for page in range(1, 41):# 标题title = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/a/text()' % page)# 日期timeData = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/span/text()' % page)# 链接(因为用的是相对链接,所以要加上:http://www.jb51.net)nextUrl = html.xpath('//*[@id="contents"]/div/div[1]/div/div[3]/dl/dt[%s]/a/@href' % page)print('str1=== ' + str(title[0]))print('timeData=== ' + str(timeData[0]))nextUrl = 'http://www.jb51.net' + nextUrl[0]print('nextUrl=== ' + str(nextUrl))# ver_info = list(zip(title[0],nextUrl,timeData[0]))pageNum = pageNum + 1ws.cell(row=pageNum, column=1).value = title[0]ws.cell(row=pageNum, column=2).value = nextUrlws.cell(row=pageNum, column=3).value = timeData[0]
  • 使用try except finaly 进行数据的爬取,这样保证在最后也能进行数据的保存
def start(page1,page2):try:for i in range(page1, page2):mUrl = 'http://www.jb51.net/list/list_97_%s.htm' % iprint('url ' + mUrl)data = getHtml(mUrl)etreeMyHtml(data)except:print('error '+i)finally:wb.save('脚本之家脚本python专栏' + '.xlsx')

这次是失业了, 确实公司比较小,发工资都是老板亲手来发工资,遇到个京东众筹,资金又暂时的周转不过来,只能先把我这来了半年不到的小喽啰给裁掉咯。以后android 可能会慢慢放弃,转向大数据方向吧。python,你用你知道爽。下次学习招聘网站的爬取,因为自己要找工作了嘛。

python3 [入门基础实战] 爬虫入门之xpath爬取脚本之家python栏目相关推荐

  1. python3 [入门基础实战] 爬虫入门之爬取豆瓣阅读中文电子书[热门排序]

    稍微总结一下: 今天爬的稍微有点打击士气了,但是还是学到了不少东西, 告诉我们,要学会自己去百度,谷歌答案, 自己去思考,不要依赖一些技术交流QQ群,很多都是水群的, 真的帮助你的是很少的. 重点在这 ...

  2. 爬虫基础练习: 基于 java + Jsoup + xpath 爬取51job网站

    最基本的网页爬虫练习 爬取51jb网站,并将数据写入Excel中 需要导入jsoup包和POI相关包 JSoup简介 jsoup是一款Java的HTML解析器,主要用来对HTML解析, 可通过DOM, ...

  3. Python爬虫如何实用xpath爬取豆瓣音乐

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  4. python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

    先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...

  5. 在当当买了python怎么下载源代码-爬虫实战一:爬取当当网所有 Python 书籍

    图片来自 unsplash 我们已经学习 urllib.re.BeautifulSoup 这三个库的用法.但只是停留在理论层面上,还需实践来检验学习成果.因此,本文主要讲解如何利用我们刚才的几个库去实 ...

  6. python爬虫爬当当网_爬虫实战一:爬取当当网所有 Python 书籍

    本文转载自微信公众号[ 极客猴 ],作者知乎主页 此前错误标注来源导致侵权,在此表示歉意. 我们已经学习 urllib.re.BeautifulSoup 这三个库的用法.但只是停留在理论层面上,还需实 ...

  7. python3[爬虫实战] 使用selenium,xpath爬取京东手机(下)

    这次主要是进行京东具体某个店铺手机评论内容的爬取. 本来是跟上一起写的,只是没有时间一块做总结,现在写上来是有点生疏了.这里是暂时获取一个商品的评论内容 爬取的字段:评论内容,购买机型,评论人 上代码 ...

  8. Python爬虫之利用xpath爬取ip代理网站的代理ip

    爬虫工具 python3 pycharm edge/chrome requests库的用法 requests库是python中简单易用的HTTP库 用命令行安装第三方库 pip install req ...

  9. 爬虫爬评书吧_爬虫学习:xpath爬取评书网

    在家闲着,想找点评书听,但找了很久都没找到方便打包下载的地方.于是就拿起自学的python爬虫,自己动手丰衣足食. 运行环境:Windows7,python3.7 操作步骤: 1.打开选好的评书主页面 ...

最新文章

  1. GoAccess安装及分析nginx实时日志
  2. 卷积神经网络(cnn) 手写数字识别
  3. GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!
  4. Response对象学习
  5. How AET fields are retrieved from backend
  6. Visual Studio 2017 15.5.0 正式发布 正式版下载
  7. python运算符号输入_【Python】【运算符】
  8. 思科 GNS3 配置 NAT 端口映射
  9. Slickflow.NET 开源工作流引擎高级开发(四) -- 硬核编码:代码式快速构建流程图...
  10. Edraw Max(亿图图示):新手如何快速美化思维导图?
  11. 大学计算机基础知识电子版,(完整版)大一大学计算机基础课程知识点.pdf
  12. 矢量文字符号文件格式设计
  13. win7与internet时间同步出错_时间同步出错,教您时间同步出错
  14. springmvc+mybatis 无极限树形结构 Mapperxml 映射方法
  15. PlayYou 捉弄人软件(手机控制电脑)
  16. 计算机专业 中职学校顶岗实习学校总结,中职学校顶岗实习论文(2)
  17. 怎么录制屏幕视频?高效便捷方法在这里
  18. 【翻译】Dremel: Interactive Analysis of WebScale Datasets
  19. 10个最常见的HTML5面试题及答案
  20. 电口以太网物理层一致性测试原理与过程

热门文章

  1. https在jsp中简单使用
  2. arcpy将img栅格批量转换为tif格式:
  3. 等保三级安全要求简要攻略-安全通信网络和安全区域边界
  4. 分享2种规划思维和4个规划方法
  5. 无法进入系统如何正常备份数据
  6. 用python爬取下载b站视频
  7. 实验四.路由器静态路由的配置
  8. MySQL社区版安装
  9. 常用测井曲线代码及名称
  10. YoloV2学习小总结