Archive for the ‘python’ Category

python中的beautifulsoup和xpath有什么异同点?

2017-07-21

python中的beautifulsoup和xpath有什么异同点?


python中的beautifulsoup和xpath都能解析html,那么问题来了
1.他们有什么异同点?
2.他们各自擅长的地方是什么?

BeautifulSoup是一个库,而XPath是一种技术,python中最常用的XPath库是lxml,因此,这里就拿lxml来和BeautifulSoup做比较吧

1 性能 lxml >> BeautifulSoup

BeautifulSoup和lxml的原理不一样,BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多。而lxml只会局部遍历,另外lxml是用c写的,而BeautifulSoup是用python写的,因此性能方面自然会差很多。

2 易用性 BeautifulSoup >> lxml

BeautifulSoup用起来比较简单,API非常人性化,支持css选择器。lxml的XPath写起来麻烦,开发效率不如BeautifulSoup。

  1. title = soup.select('.content div.title h3')

同样的代码用Xpath写起来会很麻烦

  1. title = tree.xpath("//*[@class='content']/div[@class='content']/h3")

3 总结

需求比较确定,要求性能的场合用lxml,快速开发用BeautifulSoup

ps: BeautifulSoup4可以使用lxml作为parser了

alexa前100万网站列表下载与应用

2016-11-14

1、直接上结果:

alexa前100万网站列表下载:

http://s3.amazonaws.com/alexa-static/top-1m.csv.zip

2、在哪里找到这个列表的

https://support.alexa.com/hc/en-us/articles/200449834-Does-Alexa-have-a-list-of-its-top-ranked-websites

3、找的方法

用google查询  site:alexa.com top-1m.csv.zip

4、这个列表有什么用?

(1)例子1:判断域名应用率,国内域名应用率

  1. 先把国内经常会用的域名后缀列出来:com、cn、com.cn、net、net、gov.cn
  2. 从列表中筛选出这些域名
  3. python爬虫遍历,再次确认他们语言是中文
  4. 再拆分后缀,统计数据,计算占比
  5. 一直在吹嘘的某些泡沫后缀,其实可以完全不计了,米农要跳过这些泡沫,不要玩。也可以看前缀,看看有那些优秀的网站用的是什么域名前缀,还是否有这样的前缀机会。同时也可以找到优秀域名将来可能会启用的域名,提前布局。当然还有一种域名就更牛了,直接是行业词,例如geyan.com xiaohua.com 或者大流量站,上升流量站还没有收购终端域名,都值得提前布局。

(2)例子2:挖行业词库

  1. 如例子1找到这些中文站,爬虫抓取标题
  2. Search标题的核心词,举例:手表,就搜索“表”按alexa排序,牛叉的行业站就出来了
  3. python遍历爱站关键词,就是行业词库了

更多应用场景,等你来开发

Python 模拟登录及表单提交

2011-04-19

# -*- coding: utf-8 -*- 
import re 
import urllib 
import urllib2 
import cookielib 
 
#获取CSDN博客标题和正文 
url = "http://blog.csdn.net/[username]/archive/2010/07/05/5712850.aspx
sock = urllib.urlopen(url) 
html = sock.read() 
sock.close() 
content = re.findall(’(?<=blogstory">).*(?=<p class="right artical)’, html, re.S) 
content = re.findall(’<script.*>.*</script>(.*)’, content[0], re.S) 
title = re.findall(’(?<=<title>)(.*)-.* - CSDN.*(?=</title>)’, html, re.S) 
#根据上文获取内容新建表单值 
blog = {’spBlogTitle’: title[0].decode(’utf-8′).encode(’gbk’), #百度博客标题 
        ’spBlogText’: content[0].decode(’utf-8′).encode(’gbk’),#百度博客内容 
        ‘ct’: "1", 
        ‘cm’: "1"} 
del content 
del title 
 
#模拟登录 
cj = cookielib.CookieJar() 
#用户名和密码 
post_data = urllib.urlencode({’username’: ‘[username]‘, ‘password’: ‘[password]‘, ‘pwd’: ‘1′}) 
#登录路径 
path = ‘https://passport.baidu.com/?login’ 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders = [('User-agent', 'Opera/9.23')] 
urllib2.install_opener(opener) 
req = urllib2.Request(path, post_data) 
conn = urllib2.urlopen(req) 
 
#获取百度发布博客的认证令牌 
bd = urllib2.urlopen(urllib2.Request(’http://hi.baidu.com/[username]/creat/blog’)).read() 
bd = re.findall(’(?<=bdstoken\" value=\").*(?=ct)’, bd, re.S) 
blog['bdstoken'] = bd[0][:32] 
#设置分类名 
blog['spBlogCatName'] = ‘php’ 
#比较表单发布博客 
req2 = urllib2.Request(’http://hi.baidu.com/[username]/commit’, urllib.urlencode(blog)) 
 
#查看表单提交后返回内容 
print urllib2.urlopen(req2).read() 
 
#请将[username]/[password]替换为您的真实用户名和密码