初学爬虫(四)

一.爬取目标

 网址:http://www.babynames.com/Names/search.php

任务:分三个类别(Unisex,Male,Female)获取英文名的详情信息(Gender,EnName,Souce,Meaning,Description及详情URL)

二.爬取思路

1.首先在主页获取A-Z的html并保存到本地

2.然后创建三个文件夹,把Unisex,Male,Female的婴儿名区分开

3.再获取每个英文名的详情url

4.获取信息详情

5.根据性别不同存到不同的文件里

三.   运用的技术:
1:requests 模块请求,加headers  

2:re 正则模块   基本只是用了简单的  .*?

3:bs4  中的BeautifulSoup  运用了其中的类选择器

4:lxml 中的 etree方法

5:os 模块中的  判断文件是否存在方法

6:csv 模块的存入和读取

四.代码 略

1)No module named 'lxml',用pip install lxml无法下载

解决方案: 换成pip install --user lxml

 (2)爬取个人信息性别的时候一直提示错误

原因:每个个人信息性别的属性是不一样的

 

所以这个时候需要一个判断语句来获取性别

 Gender = soup.find_all("a", class_="logopink")
        #此处匹配分三种情况    因为分为男女  还有中性的
        if Gender :
            pattern = re.compile('<a class="logopink" href=".*?">(.*?)</a>')
            Gender = pattern.findall(str(Gender[0]))[0]
        elif soup.find_all("a", class_="logoblue"):
            Gender = soup.find_all("a", class_="logoblue")
            pattern = re.compile('<a class="logoblue" href=".*?">(.*?)</a>')
            Gender = pattern.findall(str(Gender[0]))[0]
        else:
            Gender = soup.find_all("a", class_="logogreen")
            pattern = re.compile('<a class="logogreen" href=".*?">(.*?)</a>')
            Gender = pattern.findall(str(Gender[0]))[0]

六.运行结果及csv文件

 

 

原文地址:https://www.cnblogs.com/qq991025/p/12076746.html