记一次艰难的爬虫,顺便记录一下问题

今天写了一个爬虫,大手子看来可能很简单,但是对我这样的渣渣而言已经竭尽全力了。。。

先贴上代码

import requests
from bs4 import BeautifulSoup

def getCountries(url):
    page = requests.get(url)
    page.encoding = "utf-8"
    content = page.text #get content from url
    
    soup = BeautifulSoup(content, "html.parser")
    
    span = soup.find_all("span", class_= "mw-headline")[0 : 7]
    continents = [s.text for s in span]
    print (continents)
    ul = soup.find_all("ul")[1:8]
    li = []
    countries = []
    for i in range(len(ul)):
        li.append(ul[i].select("li"))
        temp = []
        for j in range(len(li[i])):
            country = (((ul[i].select("li"))[j].text).split())[0]
            temp.append(country)
        countries.append(temp)
    countries.insert(1, [])
    countries[-2].extend(countries[-1])
    countries.pop()
    countries_continents = {}
    for i in range(len(countries)):
        countries_continents[continents[i]] = countries[i]
    print (countries_continents['Africa'])

那么接下来说说题目要求:

题目很简单,EnglishWikipedia上面获取国家和大陆信息。

分析html以后发现所有的国家信息存在于ul标签下的li标签下的a标签里

大陆信息存在于span标签

想记录的有几个点:

1.根据标签的id或者class寻找html标签的方法:

span = soup.find_all("span", class_= "mw-headline")

这里用了find_all函数,前面的“span”是标签名,用class找后面就加class的值,用id找后面就加id的值;

2..select()的使用

寻找子标签费了我不少力气,因为两个嵌套,全是数组,最容易出现的问题就是提醒你list没有text属性,或者没有select属性,这个时候就是用的两层嵌套循环来访问ul或者li中的每个标签;

3.数组越界问题

这个是个老生常谈的话题了,这次数组越界的问题在于我想给countries[i]直接使用append方法,但是行不通,具体原因我到最后也没搞懂,后来是把国家名称赋值给了另外一个临时数组temp然后用temp 来 append到countries里面。

大概就是这么个意思,这个帖子主要想记录自己爬虫的经验和问题,下次就可以直接找了,因为之前写过一次,隔得时间长了就忘记了,用这个记录下来比较好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值