import urllib    #python中用于获取网站的模块

import urllib2, cookielib 

有些网站访问时需要cookie的,python处理cookie代码如下:

cj = cookielib.CookieJar ( )

opener =  urllib2.build_opener( urllib2.HttpCookieProcessor(cj) )

urllib2.install_opener (opener) 

通常我们需要在网站中搜索得到我们需要的信息,这里分为二种情况: 

1. 第一种,直接改变网址就可以得到你想要搜索的页面: 

def GetWebPage( x ):  #我们定义一个获取页面的函数,x 是用于呈递你在页面中搜索的内容的参数

      url = \’http://xxxxx/xxx.cgi?&\’ + ‘你想要搜索的参数’   # 结合自己页面情况适当修改

      page = urllib2.urlopen(url)

      pageContent = page.read( )

      return pageContent                #返回的是HTML格式的页面信息

2.第二种,你需要用到post方法,将你搜索的内容放在postdata里面,然后返回你需要的页面  

def GetWebPage( x ):  #我们定义一个获取页面的函数,x 是用于呈递你在页面中搜索的内容的参数

     url =  \’http://xxxxx/xxx\’    #这个网址是你进入搜索界面的网址

     postData = urllib.urlencode( {  各种‘post’参数输入 } )   #这里面的post参数输入需要自己去查

     req= urllib2.Request (url, postData)

     pageContent = urllib2.urlopen (req). read( )

     return pageContent                #返回的是HTML格式的页面信息

 在获取了我们需要的网页信息之后,我们需要从获得的网页中进一步获取我们需要的信息,这里我推荐使用 BeautifulSoup 这个模块, python自带的没有,可以自行百度谷歌下载安装。 BeautifulSoup 翻译就是‘美味的汤’,你需要做的是从一锅汤里面找到你喜欢吃的东西。 

import re  # 正则表达式,用于匹配字符

from bs4 import BeautifulSoup  # 导入BeautifulSoup 模块 

soup =  BeautifulSoup(pageContent)  #pageContent就是上面我们搜索得到的页面 

soup就是 HTML 中所有的标签(tag)BeautifulSoup处理格式化后的字符串,一个标准的tag形式为: 

hwkobe24 

通过一些过滤方法,我们可以从soup中获取我们需要的信息: 

(1) find_all ( name , attrs , recursive , text , **kwargs)

  这里面,我们通过添加对标签的约束来获取需要的标签列表, 比如 soup.find_all (\’p\’) 就是寻找名字为‘p’的 标签,而soup.find_all (class = “tittle”) 就是找到所有class属性为”tittle” 的标签,以及soup.find_all ( class = re.compile(\’lass\’)) 表示 class属性中包含‘lass’的所有标签,这里用到了正则表达式(可以自己学习一下,非常有用滴) 

当我们获取了所有想要标签的列表之后,遍历这个列表,再获取标签中你需要的内容,通常我们需要标签中的文字部分,也就是网页中显示出来的文字,代码如下: 

   tagList = soup.find_all (class=”tittle”)   #如果标签比较复杂,可以用多个过滤条件使过滤更加严格 

   for tag in tagList:

         print tag.text

         f.write ( str(tag.text) )  #将这些信息写入本地文件中以后使用 

(2)find( name , attrs , recursive , text , **kwargs ) 

       它与 find_all( ) 方法唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果 

(3)find_parents( )  find_parent( ) 

    find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等. 

find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,搜索方法与普通tag的搜索方法相同,搜索文档搜索文档包含的内容 

(4)find_next_siblings()  find_next_sibling() 

      这2个方法通过 .next_siblings 属性对当 tag 的所有后面解析的兄弟 tag 节点进代, find_next_siblings() 方法返回所有符合条件的后面的兄弟节点,find_next_sibling() 只返回符合条件的后面的第一个tag节点 

(5)find_previous_siblings()  find_previous_sibling() 

     这2个方法通过 .previous_siblings 属性对当前 tag 的前面解析的兄弟 tag 节点进行迭代, find_previous_siblings()方法返回所有符合条件的前面的兄弟节点, find_previous_sibling() 方法返回第一个符合条件的前面的兄弟节点 

(6)find_all_next()  find_next() 

     这2个方法通过 .next_elements 属性对当前 tag 的之后的 tag 和字符串进行迭代, find_all_next() 方法返回所有符合条件的节点, find_next() 方法返回第一个符合条件的节点 

(7)find_all_previous() 和 find_previous()     

      这2个方法通过 .previous_elements 属性对当前节点前面的 tag 和字符串进行迭代, find_all_previous() 方法返回所有符合条件的节点, find_previous()方法返回第一个符合条件的节点。

 

实际代码示例:(爬取网页下的指定链接)

from bs4 imp
#html文本
html_text=””

soup=BeautifulSoup(html_text,\’html.parser\’)
a=soup.select(\’a\’)
for i in a:
if i.string==”关键词”:
findb_ur=i[\’href\’]
#输出通过搜索a标签中的字符串获得网页链接
# print(findb_url)
#findb_url=”https:”+finburl
alist=soup.find_all(\’a)
for a in alist:
1.通过下标操作的方式
href=a[\’href\’]
print(htref)
2.通过attrs属性的方式
href=a.attrs[\’href\’]
print(href)

版权声明:本文为wswyy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wswyy/p/11968398.html