发布于2019-08-07 11:40 阅读(648) 评论(0) 点赞(0) 收藏(2)
使用python3下边的2to3.py
打开cmd,进到python安装目录下的 \Tools\scripts文件夹中 输入python 2to3.py -w 目标py文件路径/目标.py
通过这种方式可以将一些格式的区别进行转化。
import格式的区别:
py2和py3的import机制不同,详情可以百度。
比如在A文件夹下有A1.py和A2.py,在py2中,可以直接A1.py导入A2可以直接写成import A2
在py3中,需要改成from A import A2
connect close问题:(如图)
现象: 自己浏览器可以打开,但是爬虫时一直连接close。网上找了一些方法发现没什么用。
解决方法:抓取自己浏览器的数据包,将自己的agent放到爬虫的request里即可正常爬取。怀疑是自己选取的agent数据集太老了,导致无法连接。
此问题只存在于个别网站,原有的agent数据是可以访问大多数网站的。
网站内容列表每个页面都是同样的url问题:
情况1: 当翻页时,可以通过抓包来获取到真实的url
情况2: 通过前端页面可以找到真实的url
情况3:在无法获取到url时,可以通过web driver得到一个页面,然后通过click下一页等按钮来实现翻页
比如可以使用xpath来对button进行定位:
- nextPage = driver.find_element_by_xpath("*******")
- nextPage.click()
还可以通过执行JavaScript的方式来翻页,比如:
driver.execute_script("javascript:getBidList('153','-1',{0});".format(j))
情况4:抓包无法获取到真实的url,但是可以抓取到json格式的数据包,例如:
- { "people": [
- { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
- { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
- { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
- ]}
前端页面将这些服务器返回的json数据填入到相应的位置从而结合成我们看到的页面。可以将这些数据用get_text()的方法,然后使用正则匹配即可提取出所需的信息。
正则匹配的问题:
(.*?)解决不了的问题用(.+$)解决了,迷。
正则匹配里的?:是非常好用的。
正则匹配的效果,开始的时候会有很多考虑不到的情况,越往后积累的越多,提取关键词的效果也就越好,感觉还有点机器学习的意思。
解码格式的问题:
字符编码的话改成gbk或者utf-8之类的,换着试,应该总能得到合适的。其中夹杂的一些不可见字符,报错的时候直接replace掉就行了。
- soup=BeautifulSoup(html, 'html.parser')
- content0 = str(soup).replace(u'\xa0', '').replace(u'\xa5', '')
- contents = soup.get_text()
- contents1 = contents.encode('gbk', 'ignore')
- contents = contents1.decode('gbk')
需要登录的情况,可以找到输入框填充账号和密码,还可以通过cookie登录:
- headers ={
- 'Host': '*****',
- 'Connection': 'keep-alive',
- 'Cache-Control': 'max-age=0',
- 'Upgrade-Insecure-Requests': '1',
- 'User-Agent': '*******',
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
- 'Accept-Encoding': 'gzip, deflate, br',
- 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
- 'Cookie': '*******'
- }
- response = requests.get(url, headers = headers)
- soup =BeautifulSoup(response.content, 'html.parser')
存成txt:
存成txt是很简单的,大致逻辑如下:
- soup=BeautifulSoup(html,'html.parser')
- conent=soup.find('div', class_='content').get_text()
- with open ('file.txt','a') as m:
- m.write(content)
储存成excel:
python操作excel需要用到xlrd和xlwt两个模块。例如:
- myxls = xlwt.Workbook()
- sheet1 = myxls.add_sheet(u'sheet1', cell_overwrite_ok=True)
- headData = ['姓名', '学号', '班级']
- for colnum in range(0, 3):
- sheet1.write(0, colnum, headData[colnum], xlwt.easyxf('font: bold on'))
- myxls.save('infomation.xls')
直接存入数据库:
还没做
pdf等附件下载的问题:
- r = getHtml(url)
- f = open(filename, 'wb')
- downdown(f, r)
- def downdown(f,r):
- block = 8192
- while True:
- buffer = r.read(block)
- if not buffer:
- break
- f.write(buffer)
- f.close()
下载附件主要是注意附件的类型,这个在url中应该会有体现,什么类型的文件就储存成什么类型的文件。
表格问题:
有些网站的数据是以表格形式来展示的,如果每个网页的格式都是统一的,那么可以写出一个傻瓜式的代码,直接定位抽取有关信息就行了。但是有的网站每个网页的表格格式都是不一样的,因此采取了先遍历tr,再遍历td的方法,通过正则匹配关键词去寻找要提取的内容。
将表格原始数据保存下来,存成html文件。
- pattern_table = re.compile(r'(<table.*?/table>)', re.S)
- tbody = re.findall(pattern_table, contents)
- table = open('%s.html' % name, "w+")
- print(tbody, file=table)
- table.close()
附件命名问题:字符串中存在/ \ : * " < > | ?符号,文件名中不能有这个符号,所以报错。可用replace函数去掉。
附件名称可能存在重复,例如当爬取到两个“附件.pdf”时,后边的附件会覆盖掉前边的附件。因此需要改变文件命名的方式,比如使用时间+项目名称的方式等等。
作者:前方一片漆黑
链接:https://www.pythonheidong.com/blog/article/10443/dd8ce62e770172fc2676/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!