python初试——简单的抓取

第一次接触python,并且需要短时间内写出抓取网页内容的爬虫小工具,遇到了不少问题,在此总结一下。

主要学习了两种抓取网页的方式,beautifulsoup和lxml,个人感觉beautifulsoup定位简单,但是lxml在检索速度方面比较快,所以最终采用了lxml的方式。

1.beautifulsoup

安装

https://www.crummy.com/software/BeautifulSoup/bs4/download/下载,放在python文件夹下,通过easy_install或pip安装

引入
from bs4 import BeautifulSoup
打开路径
html = requests.get(url ).content
soup = BeautifulSoup(html, "html.parser")
定位指定标签内容
article=soup.find('div',class_='content__body').find('article',class_='article')

寻找所有同种标签下的内容

        for p in body.findAll('p'):
            txt = p.get_text()
            fo_txt.write(txt + "\n")

2.lxml

安装

https://pypi.python.org/pypi/lxml/2.3下载相应版本的lxml,在命令窗口中输入pip install whl文件的全名,等待安装完成

引入
from lxml import etree

有的whl版本不包含etree所以为了方便,大家还是寻找匹配的包含etree的whl版本下载,我用的是python3.6,下载的是lxml-4.1.0-cp36-cp36m-win_amd64.whl。

打开路径
html = requests.get(url, headers=headers).content
root = etree.HTML(html.decode('utf-8', 'ignore'))

由于在抓去网页的过程中出现特殊字符,无法识别,所以编码中添加‘ignore’

定位指定标签内容

介绍常用的lxml的几个语法:

  • //从匹配选择的当前节点选择文档的节点,而不考虑他们的位置(绝对路径)
root.xpath('//article[@id = "article-main"]')
 寻找id属性为“article-main”的article标签
  • /从根节点选取(相对路径)
article.xpath('//div[@class = "intro"]/p/text()')
p标签是div的直属子标签,text()获得p标签的内容 
  • . 选取当前节点
article[0].xpath('.//div[@class = "content__article-body from-content-api js-article__body"]/aside//p[@class = "pullquote-paragraph"]/text()')
从当前节点开始往下检索,尤其在使用循环抓取相同标签内的内容时,若直接使用//可能会出现一直抓取整个html中出现的第一个此标签,若使用.//则可避免这种情况
  • @选取属性
 article.xpath('//span[@class = "article__imgWrapper"]/img/@src')
获取img标签的src属性的内容

更多代码详情可参考我的github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,sort_index()函数是pandas库中DataFrame数据对象的一个方法,用于根据行标签和列名称对数据进行排序。函数的语法如下:sort_index(axis=0, level=None, ascending=True, inplace=False, kind="quicksort", na_position="last", sort_remaining=True, ignore_index=False)。\[1\] 另外,pandas的DataFrame数据对象还有另一种排序方式,即根据指定某一列的值进行排序,这可以通过sort_values()函数实现。\[2\] 需要注意的是,sort_index()函数是根据行标签和列名称进行排序,而sort_values()函数是根据某一列的值进行排序。 除了pandas库中的排序函数,还可以使用其他排序算法,比如冒泡排序和选择排序。冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小并交换位置来实现排序。\[3\]选择排序是另一种常见的排序算法,它通过每次选择最小的元素并将其放置在已排序部分的末尾来实现排序。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *2* [python函数sort_index 和 sort_values排序](https://blog.csdn.net/lss1990lss/article/details/119559207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [蓝桥杯python组————笔记整理](https://blog.csdn.net/qq_46639904/article/details/124023255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值