为什么根据迭代数组元素的位置得到不同长度的输出元素数组?

时间:2017-01-05 14:02:51

标签: python-3.x set html-parsing python-requests

因此,此代码的目的是提供页面上的URL列表,但我发现输出的URL数量取决于所使用的数组中元素的位置迭代时,即 params = [“src”,“href”]

代码包含带有导入的请求库的工作程序,使用的是requests.get(),response.text以及列表和循环等结构。 要复制代码,请使用展开代码段按钮。

问题:

  1. 当我在params数组中的0-s位置使用“src”时,为什么会得到 8 urls 当我在params数组中的0-s位置使用“href”时, 136 url ,请参阅:
  2. "href" on the 1st position

    "src" on the 1st position

    1. 如何获得数组all_urls中的所有元素(src和href)?
    2. <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.user.sdktext1">
      
          <application
              android:allowBackup="true"
              android:icon="@mipmap/ic_launcher"
              android:label="@string/app_name"
              android:supportsRtl="true"
              android:theme="@style/AppTheme">
              <activity android:name=".MainActivity">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      

1 个答案:

答案 0 :(得分:1)

回答你的问题:

1-这是因为您在循环中使用了page变量

url, n = getURL(page, param)
page = page[n:] // this one here

这只是在每次迭代后切片页面字符串并将其重新分配给同一个变量,因此您在每次迭代时都会丢失一个块。当您到达最后一个srchref时,您可能已经在文档的末尾。

2-您的代码的一个非常快速的解决方法是重置每个新page的{​​{1}}:

param

然而

有一种更好的方法来处理for param in params: page = response.text while True: url, n = getURL(page, param) page = page[n:] .... 。为什么不用HTML来执行此任务?

例如,您可以使用BeautifulSoup4,例如:(非最佳代码,未经过测试,仅用于快速演示)

HTML Parser