hahawangzi 发表于 2020-4-14 14:21

python新手求助 抓取网页 无法遍历 只出来一个结果

问题如下:#_*_ coding:"UTF-8" _*_

import os,sys
import requests
from bs4 import BeautifulSoup
import re

#-------------------------------------

url='http://www.dashuzhai.com/lingyikongbu/yichangguishi/yichangguishi1guidaopia/'
headers={
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'

      }
r=requests.get(url,headers=headers)
r.encoding="gbk"
mulu=BeautifulSoup(r.text,'html.parser')
print(mulu.find('title').get_text())
dict={}
for i in mulu.find_all('div',class_="mulu"):
    for j in i.find_all('ul'):
      print(j.find('a').getText())

    #print(i.find('a',href=re.compile('/lingyikongbu/\D')).getText())

我用遍历寻找mululist 然后用正则搜索href 并或许 改text 但是每次就出来一个墓地枷声1
后面的就遍历不到了,搞不清楚问题在哪里
如果我用 find_all('div',class_="mulu") 然后获取他的getText倒是能够获得 但并不是遍历出来的 结果
后面我要每章名字对应地址,求各位老师指点迷津

LLL9692 发表于 2020-4-14 14:31

如果数据在响应体里面 可以用 xpath 比较方便

lntuer 发表于 2020-4-14 14:31

这正则表达式,也是醉了{:301_971:}

小屎球 发表于 2020-4-14 14:33

本帖最后由 小屎球 于 2020-4-14 14:51 编辑

mulu中就一个div,所以只循环一遍就完了
随便改了下 你再细化一下
print(mulu.find('title').get_text())
dict={}
for i in mulu.find_all('div',class_="mulu"):
    j = i.find_all('li')
for li_a in j:
    print(li_a.find('a').getText())

辣丝丝小白菜 发表于 2020-4-14 14:45

用 select 或select_one。mulu.select('.mulu .mululist a')

大海呀大海 发表于 2020-4-14 14:57

你这写的,就一个mulu,为什么要循环?
直接搜索所有class为mululist的标签就好了,或者先找到mulu然后再找该标签下的所有mululist
soup=BeautifulSoup(r.text,'html.parser')
mulu = soup.find('div', class_='mulu')
for i in mulu.find_all('li', class_='mululist'):
    hrefStr = i.find('a')["href"]
    str = i.find('a').text

hahawangzi 发表于 2020-4-14 14:59

lntuer 发表于 2020-4-14 14:31
这正则表达式,也是醉了

嘿嘿,我刚学的自己想的,给我一个示范 如果匹配/开头的字符串呢?

hahawangzi 发表于 2020-4-14 15:01

小屎球 发表于 2020-4-14 14:33
mulu中就一个div,所以只循环一遍就完了
随便改了下 你再细化一下
print(mulu.f ...

mulu 下的字 divv 包含了mululist 我以为都能循环出来,原来这样不行的嘛?因为我单独print(j),是包含mulu下 所有mululist以及 href的,j.find('a',href)这样反而只出来一个,真奇怪,这是为什么呀

hahawangzi 发表于 2020-4-14 15:02

大海呀大海 发表于 2020-4-14 14:57
你这写的,就一个mulu,为什么要循环?
直接搜索所有class为mululist的标签就好了,或者先找到mulu然后再 ...

但是mulu 下面包含了很多字的mululist 我以为可以全部遍历出来。
因为我试过

for i in mulu.find_all('li', class_='mulu'):
    print(i)
里面mululist的内容全部都包含有的,就是取text的时候 就出来一个,所以觉得奇怪

大海呀大海 发表于 2020-4-14 15:11

hahawangzi 发表于 2020-4-14 15:02
但是mulu 下面包含了很多字的mululist 我以为可以全部遍历出来。
因为我试过



取的时候循环取就好
页: [1] 2 3
查看完整版本: python新手求助 抓取网页 无法遍历 只出来一个结果