2019年12月13日 | 标签:

标题:python 的库beautifulsoup使用方法入门及抓取百度结果页面总共6行代码

——————————————————————————————————————————-

时间:2012/11/15 16:43:24

——————————————————————————————————————————-

内容:

from bs4 import BeautifulSoup
import urllib2
import re
html=urllib2.urlopen(“http://www.baidu.com/s?wd=seo&rn=100”).read()
soup=BeautifulSoup(html)
results = soup.find_all(class_=re.compile(“result”))
for links in results:
print links.h3.get_text()
print links.span.get_text()

 

按下f5 得到结果

seo_百度百科

SEO综合查询 – 站长工具
seo.chinaz.com/ 2012-11-14
搜外SEO论坛-人气最旺的SEO行业社区,时刻交流搜索引擎技术更新…
www.seowhy.com/bbs/ 2012-11-14
SEO每天一贴 – Zac的搜索引擎优化博客。嗯,这个才是官方网站。
www.seozac.com/ 2012-11-2
百度SEO优化_外链及关键词SEO工具_百度站长平台

百度搜索引擎优化指南 Baidu SEO Guide 2.0 – seo培训入门必读
baiduseoguide.com/ 2012-10-31
seo_百度词典

SEO Company | Search Engine Optimization Firm – GreenCowSEO.com
www.greencowseo.com/ 2012-11-14
合肥优派&UPAI SEO/SEM优化中小企业营销利器.
www.upai.net.cn/ 2012-10-15

 

 

厉害了

 

首先介绍python

他是一种脚本语言, 就是不需要知道内存怎么调用 甚至不用定义变量 和php差不多

但是永远不需要使用$ 然后语法简洁的要死 如果有php的基础学习python3天就可以了

python安装

python安装很简单 下载win版本就可以了然后一路next 注意一点 要想在cmd里面直接输入python的话

需要在window的系统变量里面添加是我的电脑 环境变量 path 加入pthon的地方用分号隔开

运行使用python gui 新建一个窗口就可以编程 要运行就f5

python库的安装

安装好的python有几个文件夹里面有个libs里面是很多库的

其中最有用分析网页的就是 beautifulsoup这个库了

安装也很方便 使用cd进入到解压的文件夹下 我用的是bs4 beautifulsoup4

然后使用命令 python setup.py install

然后就额可以

使用方法就是先引入库

from bs4 import BeautifulSoup

这个里面b和s要大写 然后import 和import from区别是 前者每次使用函数需要使用前缀

import urllib2  import re

导入urllib2和re的库 这里没使用from 所以每次需要用里面的函数的时候先要使用库名.函数名

例如urllib.urlopen,  re.compile

html=urllib2.urlopen(“http://www.baidu.com/s?wd=seo&rn=100”).read()
通过函数urlopen来打开一个地址 然后读取 复制给html 返回的是html代码

soup=BeautifulSoup(html)
BeautifulSoup是一个html解析器 讲html解析成一个树状机构然后就可以方便通过起关系调用

soup.a 就是第一个a标签 如果要所以的a标签就是find_all(“a”) 如果要a标签里面的文字就是

soup.a.string,如果要a标签里面的url就是soup.a.get(“href”)

如果是meta description就是soup.find(“meta”,attrs:{name=descrption}).get(“content”)

如果是某个class的话就是soup.find(class_=re.compile(“keyword”)

记住class的话一定要下划线

results = soup.find_all(class_=re.compile(“result”))

这部比较经典

通过使用findall的方法找出所有满足条件的标签

这些标签的条件是class这个熟悉里面包含了results

这里的re.compile就是正则表达式 如果使用了from re import re

这里就只用写compile(RegEx)来匹配了

class因为是保留字符串 所以要用class_来表示

for links in results:

就是针对返回结果里面的所有变量 循环开始

print links.h3.get_text() 得到每次返回结果的h3标签里面的文字部分

print links.span.get_text()得到每次返回结果的span标签里面的文字部分

 

 

 

 

 

from bs4 import BeautifulSoup
import urllib2
import re
html=urllib2.urlopen(“http://www.baidu.com/s?wd=seo&rn=100”).read()
soup=BeautifulSoup(html)
results = soup.find_all(class_=re.compile(“result”))
for links in results:
print links.h3.get_text()
print links.span.get_text()

 

按下f5 得到结果

seo_百度百科

SEO综合查询 – 站长工具
seo.chinaz.com/ 2012-11-14
搜外SEO论坛-人气最旺的SEO行业社区,时刻交流搜索引擎技术更新…
www.seowhy.com/bbs/ 2012-11-14
SEO每天一贴 – Zac的搜索引擎优化博客。嗯,这个才是官方网站。
www.seozac.com/ 2012-11-2
百度SEO优化_外链及关键词SEO工具_百度站长平台

百度搜索引擎优化指南 Baidu SEO Guide 2.0 – seo培训入门必读
baiduseoguide.com/ 2012-10-31
seo_百度词典

SEO Company | Search Engine Optimization Firm – GreenCowSEO.com
www.greencowseo.com/ 2012-11-14
合肥优派&UPAI SEO/SEM优化中小企业营销利器.
www.upai.net.cn/ 2012-10-15

 

 

厉害了

 

首先介绍python

他是一种脚本语言, 就是不需要知道内存怎么调用 甚至不用定义变量 和php差不多

但是永远不需要使用$ 然后语法简洁的要死 如果有php的基础学习python3天就可以了

python安装

python安装很简单 下载win版本就可以了然后一路next 注意一点 要想在cmd里面直接输入python的话

需要在window的系统变量里面添加是我的电脑 环境变量 path 加入pthon的地方用分号隔开

运行使用python gui 新建一个窗口就可以编程 要运行就f5

python库的安装

安装好的python有几个文件夹里面有个libs里面是很多库的

其中最有用分析网页的就是 beautifulsoup这个库了

安装也很方便 使用cd进入到解压的文件夹下 我用的是bs4 beautifulsoup4

然后使用命令 python setup.py install

然后就额可以

使用方法就是先引入库

from bs4 import BeautifulSoup

这个里面b和s要大写 然后import 和import from区别是 前者每次使用函数需要使用前缀

import urllib2  import re

导入urllib2和re的库 这里没使用from 所以每次需要用里面的函数的时候先要使用库名.函数名

例如urllib.urlopen,  re.compile

html=urllib2.urlopen(“http://www.baidu.com/s?wd=seo&rn=100”).read()
通过函数urlopen来打开一个地址 然后读取 复制给html 返回的是html代码

soup=BeautifulSoup(html)
BeautifulSoup是一个html解析器 讲html解析成一个树状机构然后就可以方便通过起关系调用

soup.a 就是第一个a标签 如果要所以的a标签就是find_all(“a”) 如果要a标签里面的文字就是

soup.a.string,如果要a标签里面的url就是soup.a.get(“href”)

如果是meta description就是soup.find(“meta”,attrs:{name=descrption}).get(“content”)

如果是某个class的话就是soup.find(class_=re.compile(“keyword”)

记住class的话一定要下划线

results = soup.find_all(class_=re.compile(“result”))

这部比较经典

通过使用findall的方法找出所有满足条件的标签

这些标签的条件是class这个熟悉里面包含了results

这里的re.compile就是正则表达式 如果使用了from re import re

这里就只用写compile(RegEx)来匹配了

class因为是保留字符串 所以要用class_来表示

for links in results:

就是针对返回结果里面的所有变量 循环开始

print links.h3.get_text() 得到每次返回结果的h3标签里面的文字部分

print links.span.get_text()得到每次返回结果的span标签里面的文字部分

 

 

 

 

 

没有评论 (141 views)
2019年12月12日 | 标签:

标题:python抓取百度结果中的排名和网址 极速版图书馆泡8个小时的成果

——————————————————————————————————————————-

时间:2012/11/18 20:10:59

——————————————————————————————————————————-

内容:

前言

实现方法

python的正则表达式帮了很大 忙

然后走的弯路是要注意匹配的时候.*? 后面加个问号防止贪婪匹配

贪婪匹配

就是匹配43432seoseo 我用(.*)seo 会默认的抓取了 43432seo

因为他会极可能的匹配多点 所以我要使用几个问号就是抓的少点

正则表达式的双引号用转移字符\加双引号 然后多种匹配就是

(a|b)针对2种情况都可以匹配

基本上思路就是

首先用大家都很熟悉的urllib库来抓数据

然后用re的来书写正则表达

然后用findall来找到所有的匹配输入数组

然后用for循环来遍历数组

然后遍历的时候插入

 

关键是正则表达式耗时

然后就是基本的判断

mysql记得要使用commit才能提交

 

还要提高的地方

中文字符的支持

以及快照时间的分离

还有真正的着陆页面的活取

定时执行

 

import re,time,urllib2,MySQLdb
t=time.time()
key=”%E8%B7%B3%E8%88%9E%E6%9C%BA”
html=urllib2.urlopen(“http://www.baidu.com/s?wd=%s&rn=100″ % key).read()
t0=time.time()-t
p3=re.compile(r”id=\”(\d{1,3})\”.*?(mu=\”http://([^\”]*?)\”|<span class=\”g\”>\s*([^<]*)</span>)”)

t1=time.time()-t

conn = MySQLdb.connect(user=’root’,passwd=’111111′,db=’schools’)

cursor = conn.cursor()

 

m=p3.findall(html)
t2=time.time()-t
for i in m:
k=i[0]
k=int(k)

if i[1].find(“mu=\”http://www.baidu.com”)+1:#在mu中如果有www开头的是百度知道
print “zhidao.baidu.com”
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (“zhidao.baidu.com”,key,k)
cursor.execute(sql)
elif i[1].find(“mu=\”http”)+1:#在mu中的就是百度产品了
print i[2]
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[2],key,k)
cursor.execute(sql)
else:
print i[3]#就是正常产品了
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[3],key,k)
cursor.execute(sql)

t3=time.time()-t
print “serp open spend %s\ncompile pattern spend %s\nfind all results spend %s\ntotal spend %s” %(t0,t1,t2,t3)
conn.commit()
cursor.close()

前言

实现方法

python的正则表达式帮了很大 忙

然后走的弯路是要注意匹配的时候.*? 后面加个问号防止贪婪匹配

贪婪匹配

就是匹配43432seoseo 我用(.*)seo 会默认的抓取了 43432seo

因为他会极可能的匹配多点 所以我要使用几个问号就是抓的少点

正则表达式的双引号用转移字符\加双引号 然后多种匹配就是

(a|b)针对2种情况都可以匹配

基本上思路就是

首先用大家都很熟悉的urllib库来抓数据

然后用re的来书写正则表达

然后用findall来找到所有的匹配输入数组

然后用for循环来遍历数组

然后遍历的时候插入

 

关键是正则表达式耗时

然后就是基本的判断

mysql记得要使用commit才能提交

 

还要提高的地方

中文字符的支持

以及快照时间的分离

还有真正的着陆页面的活取

定时执行

 

import re,time,urllib2,MySQLdb
t=time.time()
key=”%E8%B7%B3%E8%88%9E%E6%9C%BA”
html=urllib2.urlopen(“http://www.baidu.com/s?wd=%s&rn=100″ % key).read()
t0=time.time()-t
p3=re.compile(r”id=\”(\d{1,3})\”.*?(mu=\”http://([^\”]*?)\”|<span class=\”g\”>\s*([^<]*)</span>)”)

t1=time.time()-t

conn = MySQLdb.connect(user=’root’,passwd=’111111′,db=’schools’)

cursor = conn.cursor()

 

m=p3.findall(html)
t2=time.time()-t
for i in m:
k=i[0]
k=int(k)

if i[1].find(“mu=\”http://www.baidu.com”)+1:#在mu中如果有www开头的是百度知道
print “zhidao.baidu.com”
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (“zhidao.baidu.com”,key,k)
cursor.execute(sql)
elif i[1].find(“mu=\”http”)+1:#在mu中的就是百度产品了
print i[2]
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[2],key,k)
cursor.execute(sql)
else:
print i[3]#就是正常产品了
sql = “insert into serp(url,kw, pos) values (‘%s’,’%s’, %d)” % (i[3],key,k)
cursor.execute(sql)

t3=time.time()-t
print “serp open spend %s\ncompile pattern spend %s\nfind all results spend %s\ntotal spend %s” %(t0,t1,t2,t3)
conn.commit()
cursor.close()

没有评论 (365 views)
2019年12月11日 | 标签:

———————————————————————————————————————–

内容:

#-*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import re,urllib2,time
key=”杀价”
url=”elong.com”
key=urllib2.quote(key)
t=time.time()
html=urllib2.urlopen(“http://www.baidu.com/s?word=%s” %key).read()
soup=BeautifulSoup(html)
cache=soup.find(“span”,text=re.compile(“%s” %url))
print cache.find_previous(“table”).get(“id”)
print cache.find_previous(“a”).get(“href”)
print urllib2.urlopen(cache.find_previous(“a”).get(“href”)).geturl()
print cache.get_text().split(” “)[3]
print time.time()-t

窍门使用find查找span标签中位置包含网址的 然后使用find previous 查找table 使用get 返回id值

python 查找跳转后的url 使用urllib2.open(url).geturl()这个方法 open是打开geturl是得到url

使用变量替换 是%S 然后在引号外面紧接些 % 变量名称

查文字是get_text()就可以 再用split分开

#-*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import re,urllib2,time
key=”杀价”
url=”elong.com”
key=urllib2.quote(key)
t=time.time()
html=urllib2.urlopen(“http://www.baidu.com/s?word=%s” %key).read()
soup=BeautifulSoup(html)
cache=soup.find(“span”,text=re.compile(“%s” %url))
print cache.find_previous(“table”).get(“id”)
print cache.find_previous(“a”).get(“href”)
print urllib2.urlopen(cache.find_previous(“a”).get(“href”)).geturl()
print cache.get_text().split(” “)[3]
print time.time()-t

窍门使用find查找span标签中位置包含网址的 然后使用find previous 查找table 使用get 返回id值

python 查找跳转后的url 使用urllib2.open(url).geturl()这个方法 open是打开geturl是得到url

使用变量替换 是%S 然后在引号外面紧接些 % 变量名称

查文字是get_text()就可以 再用split分开

没有评论 (528 views)