xpath的使用方法以及python爬取数据的保存
2017-08-04 14:45
801 查看
前面写了几篇关于自己爬虫时的进度以及遇到的问题,今天系统的爬取了一个网站之后又对爬虫方法有了更好的认识,所以今天我会尽量用明晰的语言来给大家介绍这些方法。
首先说明下我要爬取的内容:http://www.zbj.com/appdingzhikaifa/sq10054601.html 打开这个网址会有很多店铺,我的第一步就是爬取这个网址中店铺所对应的公司名,代码在我前面的文章中有提到,这块就不展示了。然后 http://www.qichacha.com 我会在这个网站搜索这些公司名,你会发现会有很多同名不同地区的公司,而我接下来就是需要爬下这些所有公司名的信息。
我觉得对于任何一个页面的信息爬取的方法无非Beautifulsoup或者webdriver 的方法,我自己感觉我没有太弄懂beautifulsoup,所以有时还不是很熟练,接下来我就重点介绍webdriver中的xpath。
import selenium.webdriver as webdriver #webdriverd 所需要的库
>>> driver=webdriver.Chrome() #打开浏览器 ,这里建议大家使用谷歌浏览器,根据自己对应电脑版本去官网下载对应版本就好,当然还要安装一个webdriver,百度同样可以搜索下载到,然后还有环境的配置等。。。(好像走题了)
results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a") #重点是这一句代码,//表示相对路径,/表示绝对路径,其中你找到你所需要信息的模块,比如‘div class’。而后面的a就是你找到的模块中的带有a的text文字。查找到后print就可以
至于怎么转到http://www.qichacha.com 用这个网址搜索到的公司内容,同样的,python中网址是可以相加的,设立一个base_url就可以。
爬下你的内容之后就是保存了,我看了很多方法学习到的:with open ('1,txt','wb') as f: f.write()
中间的1.txt你也可以改成xlsx格式等。保存路径默认在你的python文件夹中。当然你在使用with open 时需要加上这三行代码:
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
我这里还有一个问题没有解决就是f.write写时只会保存出来最后一页信息,貌似会覆盖前面的信息,大家有解决的方法可以和我探讨。
最后附上代码"
import urllib,sys
import selenium.webdriver as webdriver
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
>>> driver=webdriver.Chrome()
>>> driver.get('http://www.zbj.com/appdingzhikaifa/sq10054601.html')
>>> results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a")
>>> res=[]
>>> for result in results:
if result.text not in res:
res.append(result.text)
a=[]
>>> for r in res:
s=r.encode("gbk")
base_url='http://www.qichacha.com/search?key='
a.appendbase_url+urllib.quote(s.decode(sys.stdin.encoding).encode('utf8')))
>>> print a
>>> for r in a:
driver.get(r)
results=driver.find_elements_by_xpath("//p[@class='m-t-xs']")
for result in results:
print result.text
#接下来就是转码问题
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
for result in result1:
print result.text
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
with open('1.txt','wb') as f:
for result in result1:
f.write(result)
首先说明下我要爬取的内容:http://www.zbj.com/appdingzhikaifa/sq10054601.html 打开这个网址会有很多店铺,我的第一步就是爬取这个网址中店铺所对应的公司名,代码在我前面的文章中有提到,这块就不展示了。然后 http://www.qichacha.com 我会在这个网站搜索这些公司名,你会发现会有很多同名不同地区的公司,而我接下来就是需要爬下这些所有公司名的信息。
我觉得对于任何一个页面的信息爬取的方法无非Beautifulsoup或者webdriver 的方法,我自己感觉我没有太弄懂beautifulsoup,所以有时还不是很熟练,接下来我就重点介绍webdriver中的xpath。
import selenium.webdriver as webdriver #webdriverd 所需要的库
>>> driver=webdriver.Chrome() #打开浏览器 ,这里建议大家使用谷歌浏览器,根据自己对应电脑版本去官网下载对应版本就好,当然还要安装一个webdriver,百度同样可以搜索下载到,然后还有环境的配置等。。。(好像走题了)
results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a") #重点是这一句代码,//表示相对路径,/表示绝对路径,其中你找到你所需要信息的模块,比如‘div class’。而后面的a就是你找到的模块中的带有a的text文字。查找到后print就可以
至于怎么转到http://www.qichacha.com 用这个网址搜索到的公司内容,同样的,python中网址是可以相加的,设立一个base_url就可以。
爬下你的内容之后就是保存了,我看了很多方法学习到的:with open ('1,txt','wb') as f: f.write()
中间的1.txt你也可以改成xlsx格式等。保存路径默认在你的python文件夹中。当然你在使用with open 时需要加上这三行代码:
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
我这里还有一个问题没有解决就是f.write写时只会保存出来最后一页信息,貌似会覆盖前面的信息,大家有解决的方法可以和我探讨。
最后附上代码"
import urllib,sys
import selenium.webdriver as webdriver
import sys
>>> reload(sys)
>>> sys.setdefaultencoding('utf-8')
>>> driver=webdriver.Chrome()
>>> driver.get('http://www.zbj.com/appdingzhikaifa/sq10054601.html')
>>> results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a")
>>> res=[]
>>> for result in results:
if result.text not in res:
res.append(result.text)
a=[]
>>> for r in res:
s=r.encode("gbk")
base_url='http://www.qichacha.com/search?key='
a.appendbase_url+urllib.quote(s.decode(sys.stdin.encoding).encode('utf8')))
>>> print a
>>> for r in a:
driver.get(r)
results=driver.find_elements_by_xpath("//p[@class='m-t-xs']")
for result in results:
print result.text
#接下来就是转码问题
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
for result in result1:
print result.text
for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
with open('1.txt','wb') as f:
for result in result1:
f.write(result)
相关文章推荐
- python爬取网站数据保存使用的方法
- python pickle模块使用-将内存数据保存到文本中以及从文本中直接读取信息到内存中
- python爬取网站数据保存使用的方法
- python爬取网站数据保存使用的方法
- python爬取网站数据保存使用的方法
- ZK框架简介,以及在ZK下使用JXL读取Excel模板,导出数据模型到Excel的方法
- Intent传值问题(非Integer and String 数据类型)以及 intent使用方法
- Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。 (FromView)
- 数据采集技术之在Python中Libxml模块安装与使用XPath
- 最新Everest 企业版(AIDA64)使用SQL保存数据的方法介绍
- Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。
- Python Matplotlib安装方法以及使用
- FireFox中使用JQuery的ajaxfileupload插件返回JSON格式数据提示保存的解决方法。
- asp.net下的“Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。”错误的一个可能的成因
- Python中的strip()和lstrip()以及rstrip()方法的使用
- Memcached 安装、使用(Python操作)以及常用方法
- xpath的数据和节点类型以及XPath中节点匹配的基本方法
- [转]Web页面报错: Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用
- Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用
- 回顾:字符数据在内存中的存储形式以及其使用方法