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]替換為您的真實用戶名和密碼

女校剑道部官网